如何将对象分配给字段

时间:2015-08-25 13:40:44

标签: c#

我不知道如何命名。

我的课程看起来像这样:

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

我想在第二课中分配字段:

  

obj = new exampleClass();

     

obj.tmp = 3;

在第三课中调出这个tmp字段:

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

总之。我不知道如何将此tmp与字符串相关联。我希望那将是一个枚举类型。

4 个答案:

答案 0 :(得分:2)

imho a Dictionary应该符合您的需求

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

答案 1 :(得分: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添加的setter,它可确保调用者无法为字符串数组中的最后一个允许索引指定负值或值。{/ p>

答案 2 :(得分: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"

添加更多错误检查,改进变量名称(因为根据当前名称,真的不清楚你的总体目标是什么),甚至将其演变为适当的迭代器结构等

答案 3 :(得分:0)

首先请注意,123不是有效的字段名称或枚举名称。因此,我们将其称为ABC

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)
{
    // ...
}