小编Luc*_*esi的帖子

构造函数或属性:在分配值时哪一个是更好的选择

当我们应该在赋值时使用构造函数而不是属性,反之亦然.

c# constructor properties

13
推荐指数
2
解决办法
6816
查看次数

泛型中的协方差:使用有界通配符创建泛型列表

我整天都在寻找适当的解决方案,对C#来说我还很陌生。如果我是对的,则需要类似于Java代码的内容

ArrayList<IAnimalStuff<? extends Animal>> ianimals = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

仅用于C#。或当我走错路时的另一种解决方案。

详细方案:我有一个基类(动物)和多个子类(例如,狗)。

class Animal
{
}
class Dog : Animal
{
}
Run Code Online (Sandbox Code Playgroud)

我创建了所有动物的通用列表,其中包含各种不同动物的对象。

List<Animal> animals = new List<Animal>();
animals.add(new Dog()); // and so on
Run Code Online (Sandbox Code Playgroud)

另外,我有一个接口,以及从该接口派生的每种特殊动物的类。

interface IAnimalStuff<TAnimal> where TAnimal : Animal
{
    void doSomething(TAnimal animal);
}

public class DogStuff : IAnimalStuff<Dog>
{
    public override void doSomething(Dog animal) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想用Animals管理一个列表,用AnimalStuff管理一个列表。当遍历所有动物时,我要执行其他列表中对狗有效的所有Animalstuff。虽然动物列表没有问题,但我很难创建其他列表。

List<IAnimalStuff<Animals>> ianimals = new List<IAnimalStuff<Animals>>();
Run Code Online (Sandbox Code Playgroud)

与第一个列表不同,我只能将对象添加到此类型的列表中

IAnimalStuff<Animals>
Run Code Online (Sandbox Code Playgroud)

,但我也想做

ianimals.add(GetDogStuff()); // add object of type IAnimalStuff<Dog>
Run Code Online (Sandbox Code Playgroud)

我认为这是有效的,因为Dog是Animal的子类。我认为使用Java代码的上一行可以解决此问题,但是我没有找到C#的任何解决方案。还是我走错了路?

c# generics inheritance covariance

3
推荐指数
1
解决办法
381
查看次数

C#中的字典操作

我想将以下值存储到字典中:

key(字符串) - 值(字符串列表)

aaa - myfirstvalue1
aaa - myfirstvalue2

bbb - myfirstvalue3

ccc - myfirstvalue4
ccc - myfirstvalue5
Run Code Online (Sandbox Code Playgroud)

字典:

Dictionary<string, List<string> myvalues = new Dictionary<string, List<string>>();
Run Code Online (Sandbox Code Playgroud)

我试图存储这些值,但我得到了重复键错误.

c# dictionary

0
推荐指数
1
解决办法
94
查看次数