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

本文关键字:函数 typeof 删除 | 更新日期: 2023-09-27 18:31:55

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

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

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))

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

您可以使用泛型:

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

然后这样调用

Is_Valid<YourType>(request_obj);

您可以使用泛型。

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


if (Is_Valid(request_obj))
如果你想清理

你的代码,你可以创建一个扩展方法并做这样的事情。

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));

-或-

request_obj.IsValid<User_ID>();

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