2011-09-28 52 views
1

它是更多钞票,以在了解创建C#索引器,但这样的事情:索引在C#中,但没有这个

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public string Value[int i] 
    { 
     get { return myCollection[i]; } 
     set { myCollection[i] = value; } 
    } 
} 

感谢

+0

有你尝试自己运行代码?它有什么作用?它工作吗? – ColinE

回答

1

不,C#没有允许这样做。

规格部分1.6.7.3说法:

的索引是一种使物体在相同的 方式为阵列要索引的部件。一个索引器被声明为一个属性,除了 成员的名称是这个后跟在分隔符[和]之间写有 的参数列表。

我建议你用简单的方法,这就像:

public string GetValue(int key) 
{ 
    if (dictionary.ContainsKey(key)) 
     ..... 
} 

在你的情况,你通过key不是index reffer词典项目,这是相当不同模式的东西。

PS:请记住,字典不会持续项目的顺序,这可能对某些情况至关重要!

1

没有,

其实你的财产Value已经从字符串有索引,并返回字符。可能你需要这样的东西:

public class MyClass 
{ 
    Dictionary<int, string> myCollection = new Dictionary<int, string>(); 

    public Dictionary<int, string> Value 
    { 
     get { return myCollection; } 
     set { myCollection = value; } 
    } 
} 

而这将是你所期望的行为。

string value = myClassInstance.Value[0]; 
+1

+1,但可能更好地公开一个IDictionary接口,并放弃setter :) – MattDavey

+0

是的但我不想返回所有的字典,因为这也将被允许:myClassInstance.Value.Add(...),并且这个字典只能包含3个值,其他用户不能添加其他值 – Robert

+0

因此,作为一个选项,您可以:1)创建包含索引和封装的字典的类型(如果您非常想要索引); 2)将属性更改为'GetValue(int key)'; – Samich

0

你不能这样做的,(不C#支持)

怎么样,而不是

public class MyClass 
{ 
    public MyClass() 
    { 
      Values = new Dictionary<int, string>() 
    } 
     public Dictionary<int, string> Values { get; set } 
} 

这将然后让你做

MyClass foo = new MyClass(); 
var someVal = foo.Values[3]; 
相关问题