2015-08-25 5 views
1

Я не знаю, как назвать это.Как назначить объект полю

У меня есть класс выглядит следующим образом:

class exampleClass 
{ 
    string 1 = "Sth1"; 
    string 2 = "Sth2"; 
    string 3 = "Sth3"; 
    int tmp; 
} 

И я хочу, чтобы присвоить поле во втором классе:

OBJ = новые ExampleClass();

obj.tmp = 3;

И в вызове третьего класса из этой области TMP:

if(obj.tmp == 3) show me string number 3 -> "Sth3". 

В заключение. Я не знаю, как связать этот tmp со строкой. Я хочу, чтобы это был тип перечисления или что-то в этом роде.

+0

Вам нужно преобразовать номер строки в фактическое целое число с использованием int.Parse ("3") – jdweng

ответ

2

IMHO Словаре должен соответствовать вашим потребностям

Dictionary<int, string> myDict = new Dictionary<int, string>(); 
myDict.Add(1, "Sth1"); 
myDict.Add(2, "Sth2"); 
myDict.Add(3, "Sth3"); 

string Result = myDict[3]; //Sth3 
0

Прежде всего, обратите внимание, что 1, 2 и 3 являются недопустимыми именами полей или именами переименований. Итак, назовем их A, B и C.

enum MyOption { A, B, C } 


class MyClass 
{ 
    public MyOption Option { get; set; } 
} 

var obj = new MyClass(); 
obj.Option = MyOption.A; 

if(obj.Option == MyOption.A) 
{ 
    // ... 
} 
1

Самый простой способ связать объекты с небольшими последовательными номерами является массивом или списком:

class exampleClass { 
    // An object associated with int value X goes into X-th position: 
    private static readonly string[] Strings = new[] {"Sth1", "Sth2", "Sth3"}; 
    // Since tmp is used as an index, you need to protect assignments to it: 
    private int tmp; 
    public int Tmp { 
     get { return tmp; } 
     set { 
      if (value < 0 || value >= Strings.Length) { 
       throw new ArgumentOutOfRangeException(); 
      } 
      Tmp = value; 
     } 
    } 
    public string GetString() { 
     return Strings[tmp]; 
    } 
} 

Примечание добавленный сеттер для Tmp, что гарантирует, что вызывающий абонент не может присвоить tmp отрицательное значение или значение выше последнего разрешенного индекса в массиве строк.

1

Это похоже на работу для структур данных.

У вас есть несколько переменных. Что вы хотите это коллекция. Что-то вроде этого:

class ExampleClass 
{ 
    public IList<string> Strings = new List<string> { "Sth0", "Sth1", "Sth2", "Sth3" }; 
} 

Затем вы можете обратиться к элементам по их индексу:

var obj = new ExampleClass(); 
obj.Strings[3] // <--- will be "Sth3" 

Если этот индекс должен быть сохранен на объект по какой-то причине, вы можете использовать int у вас есть сейчас:

class ExampleClass 
{ 
    public IList<string> Strings = new List<string> { "Sth0", "Sth1", "Sth2", "Sth3" }; 
    public int CurrentIndex; 
} 

и ...

var obj = new ExampleClass { CurrentIndex = 3 }; 
obj.Strings[obj.CurrentIndex] // <--- will be "Sth3" 

Добавьте больше проверки ошибок, улучшить имена переменных (так как с учетом текущих имен это действительно неясно, что ваша общая цель, даже здесь), даже эволюционировать это в правильную структуру итератора и т.д.

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