Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

We need to consider a unified API for validation

Ouverte
#37 2 commentaires 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@marchc1 y travaille déjà.

Depuis le 15/10/2025.

Évaluation

Cette issue n'a pas encore été évaluée.

Description

Enhancement Needs More Info

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#.

Langage dominant
C#
Étoiles
104
Forks
9
Merge moyen
6 h 45 min
PR mergées (30 j)
118

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de SourceDotNET/Source.NET

Toutes les issues de SourceDotNET/Source.NET

Issues similaires

Plus d'issues C#

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.