Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在一个方法中检查对象JSON和流的数据是否为空_C#_Generics - Fatal编程技术网

C# 如何在一个方法中检查对象JSON和流的数据是否为空

C# 如何在一个方法中检查对象JSON和流的数据是否为空,c#,generics,C#,Generics,我有两种方法ImportJson和ImportStream 以DataImportJsonObject作为输入参数的方法ImportJson(DataImportJsonObject是一个对象) 以stream作为输入参数的方法ImportStream: public void导入流(流请求) { 如果(请求长度

我有两种方法ImportJson和ImportStream

  • 以DataImportJsonObject作为输入参数的方法ImportJson(DataImportJsonObject是一个对象)
  • 以stream作为输入参数的方法ImportStream:
public void导入流(流请求)
{ 
如果(请求长度<0)
{ 
字符串messageResult=“EmptyData”;
}             
}
事实上,通过这两个方法,我想检查enter数据是否为null, 我只想创建一个方法来同时检入:如果输入是流或对象

我尝试使用泛型方法,但我对流的长度检查有问题

   public  class MyGenericClass<T>
    {
        private T genericMemberVariable;

        public MyGenericClass(T value)
        {
            genericMemberVariable = value;
        }
        public T genericMethod(T genericParameter)
        {

            if (genericParameter == null) 
            {
                   //...
            }
            if (genericParameter is Stream)
            {
                genericParameter.Length // It is not possible this treatment
            }

            return genericMemberVariable;
        }
    }
公共类MyGenericClass
{
私有T genericMemberVariable;
公共MyGenericClass(T值)
{
genericMemberVariable=值;
}
公共T genericMethod(T genericParameter)
{
如果(genericParameter==null)
{
//...
}
if(genericParameter为流)
{
genericParameter.Length//此处理不可能
}
返回genericMemberVariable;
}
}
如何编写此代码?或者如果有其他建议或建议来实现我的目标? 谢谢,

您可以使用铸造:

if (genericParameter is Stream)
{
    var length = (genericParameter as Stream).Length;
}
您可以使用铸造:

if (genericParameter is Stream)
{
    var length = (genericParameter as Stream).Length;
}

要访问
.Length
,您需要强制转换

这可以使用模式匹配干净地完成:

if (genericParameter is Stream stream)
{
    stream.Length // now ok
}

要访问
.Length
,您需要强制转换

这可以使用模式匹配干净地完成:

if (genericParameter is Stream stream)
{
    stream.Length // now ok
}

为什么不简单地将其强制转换为:
(genericparameteras Stream).Length
,以及为什么要创建一个方法?维护这样的代码是很困难的,为什么不简单地将其强制转换为:
(genericParameter为Stream)。Length
,以及为什么要创建一个方法?维护这样的代码将很困难。他希望该方法用于除
(genericParameter作为流)之外的其他类型。
无需在此处使用null运算符,您的if将对此进行检查。@Step Up welcome,我更愿意提及这一点,而不是让它过去:)@đěxě是的,这是一个重要的通知!我喜欢!伟大的谢谢!:)他希望该方法用于除
(genericParameter为流)以外的类型。
无需在此处使用null运算符,您的if将对此进行检查。@Step Up welcome,我更愿意提及这一点,而不是让它过去:)@đěxěŕ是的,这是一个重要的通知!我喜欢!伟大的谢谢!:)