We need to consider a unified API for validation
I maintainer di solito rispondono entro 1 giorno
@marchc1 ci sta già lavorando.
Dal 15/10/2025.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Right now, a lot of things in the engine (Materials, Textures, Panels, etc) do not have a better way to determine if they're valid or not. While we won't get UAF's for having invalid pointers or anything, we will keep around resources that dont need to be kept, which also can lead to unintended behavior.
My previous engines have had something along the lines of this:
public interface IValidatable : IDisposable
{
bool Valid();
}
public static class IValidatableExts
{
public static bool IsValid<T>(this T? object) where T : IValidatable => object == null ? false : object.Valid();
}
This would allow us to have Panel for example implement it as such:
public class Panel() {
bool valid = true;
...
void Remove() {
...
Dispose();
...
}
void Dispose() {
valid = false;
}
bool Valid() => valid;
...
}
The nice thing about the extension-based API here is that T can be nullable, which allows us to run this even on a null object - meaning we don't have to do something like obj != null && obj.IsValid() - this is all valid:
Panel? panel = null;
Assert(!panel.IsValid())
panel = new Button(...);
Assert(panel.IsValid())
panel.Remove();
Assert(!panel.IsValid())
It just deviates from what Source does (ie. Source has PHandles, etc). I just think this is a little nicer given we're working with C#.
- Lingua principale
- C#
- Stelle
- 104
- Fork
- 9
- Merge medio
- 6h 45m
- PR unite (30g)
- 118
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di SourceDotNET/Source.NET
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 69/100
SourceDotNET/Source.NET#203 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 30/100
SourceDotNET/Source.NET#214 · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 52/100
SourceDotNET/Source.NET#210 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
SourceDotNET/Source.NET#117 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
SourceDotNET/Source.NET#116 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di SourceDotNET/Source.NET
Issue simili
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
elsa-workflows/elsa-foundation#3130 ·
I maintainer di solito rispondono entro 1 giorno
-
遥测历史查询始终返回 HTTP 400,页面静默无结果Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Format request: .wbpzApertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
KnifeLemon/Filee#294 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
GlebKievsky/git-tips#4 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 77/100
OrchardCMS/OrchardCore#20088 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno