如何将泛型类型参数传递给从构造函数调用的方法?

Phi*_*hil 7 c# generics constructor

这是构造函数:

 public PartyRoleRelationship(PartyRole firstRole, PartyRole secondRole)
        {
            if (firstRole == secondRole)
                throw new Exception("PartyRoleRelationship cannot relate a single role to itself.");

            if (firstRole.OccupiedBy == null || secondRole.OccupiedBy == null)
                throw new Exception("One or both of the PartyRole parameters is not occupied by a party.");

            // Connect this relationship with the two roles.
            _FirstRole = firstRole;
            _SecondRole = secondRole;


            T = _FirstRole.GetType().MakeGenericType();

            _SecondRole.ProvisionRelationship<T>(_FirstRole); // Connect second role to this relationship.
        }
Run Code Online (Sandbox Code Playgroud)

在最后一行,它在_SecondRole上调用ProvisionRelationship,它给了我运行时错误:无法找到类型或命名空间'T'...

我如何(a)正确分配T,或(b)通过构造函数传递泛型?我一直在查看相当多的帖子,但可能由于缺乏理解而遗漏了一些内容.任何人对此的帮助将不胜感激.

Che*_*ron 12

你的班级必须是通用的.所以PartyRoleRelationship需要看起来像这样:

public class PartyRoleRelationship<T>
{
    public PartyRoleRelationship(T arg, ...)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

阅读更多关于泛型类的信息:

http://msdn.microsoft.com/en-us/library/sz6zd40f(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx

编辑:

你可以简化你的代码,并像这样做:

public class RoleRelationship<T>
{
    public RoleRelationship(T firstRole, T secondRole)
    {
        if (firstRole.OccupiedBy == null || secondRole.OccupiedBy == null)
            throw new Exception("One or both of the Role parameters is not occupied by a party.");

        // Connect this relationship with the two roles.
        _FirstRole = firstRole;
        _SecondRole = secondRole;

        _SecondRole.ProvisionRelationship<T>(_FirstRole);
    }
}
Run Code Online (Sandbox Code Playgroud)