2016-01-26 2 views
-2

Это в движке Unity Game, хотя я не уверен, что это C# вещь или только Unity.C# Невозможно изменить статические поля в статическом родовом классе

//This is fine, I can assign variables to these static fields as you would expect 
public static class Test 
{ 
    public static List list = new List(); 
    public static int d = 0; 
} 

//Field in this class are always default, even after assigning values in another class 
public static class Test<T> 
{ 
    public static List<T> list = new List<T>(); 
    public static int d = 0; 
} 

public class TestClass2: MonoBehaviour 
{ 
    private void TestMethod() 
    { 
     Test<int>.d = 3; 
     Test<string>.list.Add("Hi"); 
     //Both are still null, even after declaring and assigning 
    } 
} 

Может кто-нибудь объяснить мне, почему Test<int>.d все еще 0 и List является недействительным после присвоения значения?

+0

Вам необходимо назначить это в статическом конструкторе. –

+3

Если 'list' были' null', вы получите 'NullReferenceException', когда вы вызываете' Add'. –

+0

«int» не может быть нулевым, поэтому ваш вопрос основан на ложных предположениях. –

ответ

3

Для меня работает следующий код.

Test<int>.d = 17; 
int seventeen = Test<int>.d; 

Имейте в виду Test и Test<T> не то же самое, что вы только назначая целочисленное значение для Test<int>.d.

+0

Ах. Благодарю. Когда я зависал над intellisence для теста .d, он все равно 0. Но при назначении ему семнадцати переменных он действительно работает. Я не знаю, почему это так. –

+0

Это связано с тем, что статические переменные-члены не инициализируются до первого доступа к ним. – ZivS

+0

@MartinMazzaDawson. Вы установили точку останова в первой строке? Если это так, оно еще не выполнено и в этот момент d все равно 0. –

Смежные вопросы