Comment faire une valeur par défaut pour la struct en C#?
J'essaie de faire de la valeur par défaut pour mon struct.
Par exemple, la valeur par défaut pour Int - 0, pour DateTime - 1/1/0001 12:00:00 AM.
Comme on le sait, nous ne pouvons pas définir constructeur sans paramètre dans la structure.
struct Test
{
int num;
string str;
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(default(Test)); //shows namespace and name of struct test.Test
Console.WriteLine(new Test()); //same
Console.ReadKey(true);
}
}
Comment puis-je faire une valeur par défaut pour les struct?
Lire article similaire: stackoverflow.com/questions/4572325/...
OriginalL'auteur unsafePtr | 2016-10-04
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas. Les Structures sont toujours pré-remis à zéro, et il n'ya aucune garantie que le constructeur a jamais appelé (par exemple
new MyStruct[10]
). Si vous avez besoin de défaut des valeurs autres que zéro, vous devez utiliser une classe. C'est pourquoi vous ne pouvez pas modifier le constructeur par défaut en premier lieu (jusqu'à C# 6) - il ne s'exécute jamais.Le plus proche que vous pouvez obtenir en utilisant
Nullable
champs, et d'interpréter eux d'avoir une certaine valeur par défaut si ils sont nuls par le biais d'une propriété:myInt
est toujours pré-mise à zéro, mais d'interpréter le "zéro" en tant que votre propre valeur par défaut (dans ce cas, 42). Bien sûr, cela peut être tout à fait inutile généraux 🙂Comme pour le
Console.WriteLine
, il appelle simplement le virtuelToString
. Vous pouvez le modifier en retour ce que vous voulez.OriginalL'auteur Luaan
Votre problème n'est pas le comportement de C#/.Net. La façon dont vous instanciez la structure crée effectivement un exemple avec des valeurs par défaut pour tous les champs des membres.
La
Console.WriteLine
convertit l'argument d'une chaîne à l'aide de la méthode ToString (). L'implémentation par défaut (Object.ToString()
) simplement écrit le nom de classe entièrement qualifié (espace de noms et le nom, comme vous l'appelez).Si vous voulez une autre visualisation, vous devez remplacer le
ToString
méthode:OriginalL'auteur jeroenh
L'impression d'objets de C# résultats avec les espaces de noms, à moins d'ignorer .ToString() pour les objets. Pouvez-vous définir votre struct comme ci-dessous et de l'essayer ?
PS: par défaut(Test) vous donne une struct contient par défaut(int) et par défaut(string), je veux dire le Test.num est
0
et de Test.str estnull
Espère que cette aide
OriginalL'auteur Cihan Uygun
Ce que vous voulez probablement faire est de remplacer
ToString()
, par exempleComme vous l'avez mentionné, il est impossible de définir des valeurs par défaut pour les champs autres que les valeurs par défaut pour les types. Cependant, avec un écrasé
ToString()
, vous verrez mieux formaté informations sur votre structure dans la console et en cours de débogage.OriginalL'auteur Andrew Sklyarevsky