我想在c#中实现一个泛型函数,它接受不同对象类型的字典 [英] I want to implement a generic function in c# which takes dictionary of different object types

查看:405
本文介绍了我想在c#中实现一个泛型函数,它接受不同对象类型的字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有不同的对象,如:

class Teacher
{
public int ID {get,set};
public string Subject {get,set};
public string Designation {get,set};
}

class学校
{
public int ID {get,set};
public string Type {get,set};
}

我有两个函数FillSchool(dictTeacher)和FillTeacher(dictSchool):

FillSchool(Dictionary < ; 字符串,教师 > dictTeacher)
{dicTeacher.ID = 1 }

FillTeacher(字典< int, 学校 > dictSchool)
{dictSchool.ID = 2}







现在我想制作一个单一的功能(使用泛型或更好的方法)填充这些对象中的值。

解决方案

这非常简单。例如:

 使用 System.Collections.Generic; 

// ...

< span class =code-keyword> class SomeClass< KEY_TYPE,VALUE_TYPE> {

字典< KEY_TYPE,VALUE_TYPE> myDictionary =
new Dictionary< KEY_TYPE,VALUE_TYPE>();

// 仅举例来说
internal void 添加(KEY_TYPE键,VALUE_TYPE ){
// ...
myDictionary.Add(key,);如果已找到密钥, // 可能会抛出异常
}

// 备选方案无例外:
// 将返回新值或现有值:
internal VALUE_TYPE AddOrRetrieve (KEY_TYPE键,VALUE_TYPE ){
if ((myDictionary.TryGetValue(key,< span class =code-keyword> out
value ))
return value ; // 已存在的值
myDictionary.Add(key, value ); // 由于上面的检查,不会抛出异常
// (除非你也加入其他一些帖子)
return ; // 新值
}

// 依此类推...

}





我希望我的评论能清楚这个用法。



-SA

I have different objects like :

class Teacher
{
  public int ID {get, set};
  public string Subject {get, set};
  public string Designation {get, set};
}

class School
{
  public int ID {get, set};
  public string Type {get, set};
}

I have two functions FillSchool(dictTeacher) and FillTeacher(dictSchool) as :

FillSchool(Dictionary<string,Teacher> dictTeacher)
{ dicTeacher.ID= 1}

FillTeacher(Dictionary<int, School> dictSchool)
{dictSchool.ID = 2}




Now I want to make a single function ( using generics or some better way) which fills values in these objects.

解决方案

This is really simple. For example:

using System.Collections.Generic;

//...

class SomeClass<KEY_TYPE, VALUE_TYPE> {

    Dictionary<KEY_TYPE, VALUE_TYPE> myDictionary =
        new Dictionary<KEY_TYPE, VALUE_TYPE>();

    // just for example
    internal void Add(KEY_TYPE key, VALUE_TYPE value) {
        //...
        myDictionary.Add(key, value); // may throw exception if the key is already found
    }

    // alternative without exceptions:
    // will return either new or already existing value:
    internal VALUE_TYPE AddOrRetrieve(KEY_TYPE key, VALUE_TYPE value) { 
        if ((myDictionary.TryGetValue(key, out value))
            return value; // already existing value
        myDictionary.Add(key, value); // due to the check above, won't throw exception
                                      // (unless you add in some other thread, too)
        return value; // new value
    }

    // and so on...

}



I hope my comments make this usage clear.

—SA


这篇关于我想在c#中实现一个泛型函数,它接受不同对象类型的字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆