2014-11-22 75 views
0

我在C#中使用索引器时遇到问题。由于要求我必须实现索引器。此索引器必须接受值(设置)通用类型<T>和返回(获得)类型MyClass<T>索引器获取并设置不同的类型

实施例:

class OtherClass<T>{ 
    Dictionary<string, MyClass<T>> dict; 
    //... 
}  

class MyClass<T>{ 
    T item; 
    //... 
    public void MethodFromMyClass(){ 
     //... 
    } 
} 

MyClass<String> mc = new MyClass<String>();  
mc["Name"] = "Data"; 

//Call method from MyClass 
mc["Name"].MethodFromMyClass() 

我尝试了很多东西例如。 public object this[string i] ...,但他们都没有产生预期的结果。感谢您的任何帮助。

+0

我觉得你应该表现出更多的

public class MyClass<T> { private readonly T item; public MyClass(T item) { this.item = item; } public void PrintItem() { Console.WriteLine(item.ToString()); } public static implicit operator MyClass<T>(T d) { return new MyClass<T>(d); } } 

接下来,我们应该MyClass索引定义DictionaryClass你的代码。你正在创建一个'MyClass'的实例,名为'mc',并且将它视为一个'Dictionary'(用'mc [“Name”]'...)。 – Sjips 2014-11-22 22:11:25

+0

这是什么'OtherClass '?你的意思是'mc'实际上是'OtherClass '的一个实例吗?另外,这是什么意思_semantically_分配一个字符串值到一个索引器,返回一个“MyClass ”的实例?您应该显示您希望能够编写的实际索引器代码。你不能完全按照你想要的来做,因为一个类只能包含任何给定参数类型的一个索引器,但是如果你解释了你实际要做的事情,可以给出一个合适的答案。 – 2014-11-22 22:11:38

+2

为什么你要尝试制作一个索引器,它的吸气器和它的吸气器是不同的类型?这是一个可怕的想法,C#是专门设计的,它使得很难做出可怕的想法(他们更喜欢把你带到“成功之坑”)。无论你在做什么,它都不是你可以用索引器进行有意义的建模。使用两种方法,一种是设置'T'类型的值,一种是'MyClass '包装。你的用户会感谢你。 – 2014-11-22 22:24:45

回答

0

蕴涵运算符可以帮助你。首先,我们应该定义隐运营商MyClass

public class DictionaryClass<T> 
{ 
    private readonly Dictionary<string, MyClass<T>> dict; 

    public DictionaryClass() 
    { 
     dict = new Dictionary<string, MyClass<T>>(); 
    } 

    public MyClass<T> this[string index] 
    { 
     get 
     { 
      return dict[index]; 
     } 
     set 
     { 
      dict[index] = value; 
     } 
    } 
} 

用法示例:

public void Run() 
{ 
    var myDictionary = new DictionaryClass<string>(); 
    myDictionary["Name"] = "Data"; 
    myDictionary["Name"].PrintItem(); // Prints "Data" 
} 
+0

非常感谢。这正是我需要的。 – pacibum 2014-11-23 07:52:26