C#删除typeof,而只是将类名传递给函数

时间:2016-01-25 22:24:34

标签: c# .net

在我的代码库中,我有一个接受对象及其类型的函数。

第二个参数用于执行该对象类型的验证。要传递类型,我有很多类型的(..)调用:

if(Is_Valid(request_obj,typeof(User_ID)))

我的Is_Valid函数目前声明如下:

public static bool Is_Valid(object objectUnderValidation, Type objectType)

如何修改Is_Valid函数以调用其中的typeof并只调用这样的函数:

if(Is_Valid(request_obj,User_ID))

3 个答案:

答案 0 :(得分:3)

您可以使用泛型:

public static bool Is_Valid<T>(object obj)
{
    return obj is T;
}

然后这样打电话

Is_Valid<YourType>(request_obj);

答案 1 :(得分:3)

您可以使用generics

public static bool Is_Valid<T>(T objectUnderValidation) {
  //Your code
}


if (Is_Valid(request_obj))

答案 2 :(得分:0)

如果您希望清理代码,可以创建一个扩展方法并执行类似的操作。

public static class ValidationExtensions
{
    public static bool IsValid(this object obj, Type type)
    {
        // Run your logic here.
        return true; // return Answer();
    }

    public static bool IsValid<T>(this object obj)
    {
        // Run your logic here.
        var type = typeof(T);
        return true;  // return Answer();
    }
}

现在您的代码将显示为:

request_obj.IsValid(typeof(User_ID));

-OR -

request_obj.IsValid<User_ID>();

但如果这就是你要问的话,你就无法消除typeof关键字。当然,除非该方法正在执行某些操作,否则您可以获取该类型并一起消除Type输入参数。