C# 在这里,我试图简化它以减少重复(通用模式)

C# 在这里,我试图简化它以减少重复(通用模式),c#,c#-4.0,c#-3.0,C#,C# 4.0,C# 3.0,如果以下方法中的所有这些条件都具有相似的模式,有没有想法想出一种通用方法来减少此方法中的重复 有些情况下,我们需要所有的版本,有些情况下,我们只需要特定的版本 我试过开关箱 public override Func<JObject, dynamic, string> VersionMethod => (jobject, parameters) =>{ bool hasValidObject = false; if (jobject["sw

如果以下方法中的所有这些条件都具有相似的模式,有没有想法想出一种通用方法来减少此方法中的重复

有些情况下,我们需要所有的版本,有些情况下,我们只需要特定的版本

我试过开关箱

public override Func<JObject, dynamic, string> VersionMethod => (jobject, parameters) =>{
        bool hasValidObject = false;

        if (jobject["swVersion"] != null)
        {
            _livetv.SoftwareVersion = new VersionInfo(jobject["swVersion"].Value<string>());
            hasValidObject = true;
        }

        if (jobject["hwVersion"] != null)
        {
            _livetv.HardwareVersion = new VersionInfo(jobject["hwVersion"].Value<string>());
            hasValidObject = true;
        }

        if (jobject["ltvVersion"] != null)
        {
            _livetv.LTV2Version = new VersionInfo(jobject["ltvVersion"].Value<string>());
            hasValidObject = true;
        }

        if (jobject["ltv3Version"] != null)
        {
            _livetv.LTV3Version = new VersionInfo(jobject["ltv3Version"].Value<string>());
            hasValidObject = true;
        }

        if (jobject["cricVersion"] != null)
        {
            _livetv.KAVersion = new VersionInfo(jobject["cricVersion"].Value<string>());
            hasValidObject = true;
        }

        if (jobject["bbVersion"] != null)
        {
            _livetv.BasebandVersion = new VersionInfo(jobject["bbVersion"].Value<string>());
            hasValidObject = true;
        }

        if (hasValidObject)
        {
            return GenerateSuccessful();
        }

        return GenerateUnsuccessful(
            "Unable to parse version from request, try again.");
    };
public override Func VersionMethod=>(作业对象,参数)=>{
bool hasValidObject=false;
if(jobject[“swVersion”]!=null)
{
_livetv.SoftwareVersion=新版本信息(jobject[“swVersion”].Value());
hasValidObject=true;
}
if(jobject[“hwVersion”]!=null)
{
_livetv.HardwareVersion=新版本信息(jobject[“hwVersion”].Value());
hasValidObject=true;
}
if(jobject[“ltvVersion”]!=null)
{
_livetv.LTV2Version=新版本信息(jobject[“ltvVersion”].Value());
hasValidObject=true;
}
如果(作业对象[“ltv3Version”]!=null)
{
_livetv.LTV3Version=新版本信息(jobject[“LTV3Version”].Value());
hasValidObject=true;
}
如果(jobject[“cricVersion”]!=null)
{
_livetv.KAVersion=新版本信息(jobject[“cricVersion”].Value());
hasValidObject=true;
}
if(jobject[“bbVersion”]!=null)
{
_livetv.BasebandVersion=新版本信息(jobject[“bbVersion”].Value());
hasValidObject=true;
}
if(hasValidObject)
{
return generateSuccesful();
}
返回生成器未成功(
“无法分析请求中的版本,请重试。”);
};

我会创建一个类似这样的方法:

    public VersionInfo GetVersionInfo(JObject jobject, string jObjectField, ref bool found)
    {
        if(jobject[jObjectField] != null)
        {
            _livetv.SoftwareVersion = new VersionInfo(jobject[jObjectField].Value<string>());
            found = true;
        }
        else
        {
            return null;
        }
    }
public VersionInfo GetVersionInfo(JObject-JObject,string-jObjectField,ref-bool-found)
{
if(jobject[jObjectField]!=null)
{
_livetv.SoftwareVersion=新版本信息(jobject[jObjectField].Value());
发现=真;
}
其他的
{
返回null;
}
}
那么就这样称呼它:

    public Func<JObject, dynamic, string> VersionMethod = (jobject, parameters) =>
    {
        bool hasValidObject = false;

         _livetv.SoftwareVersion = GetVersionInfo(jobject, "swVersion", ref hasValidObject);
         _livetv.HardwareVersion = GetVersionInfo(jobject, "hwVersion", ref hasValidObject); 
         _livetv.LTV2Version = GetVersionInfo(jobject, "ltvVersion", ref hasValidObject);
         _livetv.LTV3Version = GetVersionInfo(jobject, "ltv3Version", ref hasValidObject); 
         _ivetv.KAVersion = GetVersionInfo(jobject, "cricVersion", ref hasValidObject);  
         _livetv.BasebandVersion = GetVersionInfo(jobject, "bbVersion", ref hasValidObject); 

        if (hasValidObject)
        {
            return GenerateSuccessful();
        }

        return GenerateUnsuccessful(
            "Unable to parse version from request, try again.");
    };
public Func VersionMethod=(作业对象,参数)=>
{
bool hasValidObject=false;
_livetv.SoftwareVersion=GetVersionInfo(作业对象,“swVersion”,ref hasValidObject);
_livetv.HardwareVersion=GetVersionInfo(jobject,“hwVersion”,ref hasValidObject);
_livetv.LTV2Version=GetVersionInfo(jobject,“ltvVersion”,ref hasValidObject);
_livetv.LTV3Version=GetVersionInfo(jobject,“LTV3Version”,ref hasValidObject);
_ivetv.KAVersion=GetVersionInfo(作业对象,“cricVersion”,参考hasValidObject);
_livetv.BasebandVersion=GetVersionInfo(作业对象,“bbVersion”,参考hasValidObject);
if(hasValidObject)
{
return generateSuccesful();
}
返回生成器未成功(
“无法分析请求中的版本,请重试。”);
};

我会创建一个类似这样的方法:

    public VersionInfo GetVersionInfo(JObject jobject, string jObjectField, ref bool found)
    {
        if(jobject[jObjectField] != null)
        {
            _livetv.SoftwareVersion = new VersionInfo(jobject[jObjectField].Value<string>());
            found = true;
        }
        else
        {
            return null;
        }
    }
public VersionInfo GetVersionInfo(JObject-JObject,string-jObjectField,ref-bool-found)
{
if(jobject[jObjectField]!=null)
{
_livetv.SoftwareVersion=新版本信息(jobject[jObjectField].Value());
发现=真;
}
其他的
{
返回null;
}
}
那么就这样称呼它:

    public Func<JObject, dynamic, string> VersionMethod = (jobject, parameters) =>
    {
        bool hasValidObject = false;

         _livetv.SoftwareVersion = GetVersionInfo(jobject, "swVersion", ref hasValidObject);
         _livetv.HardwareVersion = GetVersionInfo(jobject, "hwVersion", ref hasValidObject); 
         _livetv.LTV2Version = GetVersionInfo(jobject, "ltvVersion", ref hasValidObject);
         _livetv.LTV3Version = GetVersionInfo(jobject, "ltv3Version", ref hasValidObject); 
         _ivetv.KAVersion = GetVersionInfo(jobject, "cricVersion", ref hasValidObject);  
         _livetv.BasebandVersion = GetVersionInfo(jobject, "bbVersion", ref hasValidObject); 

        if (hasValidObject)
        {
            return GenerateSuccessful();
        }

        return GenerateUnsuccessful(
            "Unable to parse version from request, try again.");
    };
public Func VersionMethod=(作业对象,参数)=>
{
bool hasValidObject=false;
_livetv.SoftwareVersion=GetVersionInfo(作业对象,“swVersion”,ref hasValidObject);
_livetv.HardwareVersion=GetVersionInfo(jobject,“hwVersion”,ref hasValidObject);
_livetv.LTV2Version=GetVersionInfo(jobject,“ltvVersion”,ref hasValidObject);
_livetv.LTV3Version=GetVersionInfo(jobject,“LTV3Version”,ref hasValidObject);
_ivetv.KAVersion=GetVersionInfo(作业对象,“cricVersion”,参考hasValidObject);
_livetv.BasebandVersion=GetVersionInfo(作业对象,“bbVersion”,参考hasValidObject);
if(hasValidObject)
{
return generateSuccesful();
}
返回生成器未成功(
“无法分析请求中的版本,请重试。”);
};

我会尝试以下方法:

private VersionInfo GetVersionInfo(JToken token)
{
    if (token != null)
        return new VersionInfo(token.Value<string>());
    else
        return null;
}


public override Func<JObject, dynamic, string> VersionMethod => (jobject, parameters) => 
{
    bool hasValidObject = false;

    hasValidObject |= (_livetv.SoftwareVersion = GetVersionInfo(jobject["swVersion"])) != null;
    hasValidObject |= (_livetv.HardwareVersion = GetVersionInfo(jobject["hwVersion"])) != null;
    hasValidObject |= (_livetv.LTV2Version = GetVersionInfo(jobject["ltvVersion"])) != null;
    hasValidObject |= (_livetv.LTV3Version = GetVersionInfo(jobject["ltv3Version"])) != null;

    // <<<snip>>>

     if (hasValidObject)
         return GenerateSuccessful();
     else
         return GenerateUnsuccessful(
            "Unable to parse version from request, try again.");

}
private VersionInfo GetVersionInfo(JToken令牌)
{
if(令牌!=null)
返回新版本信息(token.Value());
其他的
返回null;
}
public override Func VersionMethod=>(作业对象,参数)=>
{
bool hasValidObject=false;
hasValidObject |=(_livetv.SoftwareVersion=GetVersionInfo(jobject[“swVersion]”))!=null;
hasValidObject |=(_livetv.HardwareVersion=GetVersionInfo(jobject[“hwVersion”]))!=null;
hasValidObject |=(_livetv.LTV2Version=GetVersionInfo(jobject[“ltvVersion”]))!=null;
hasValidObject |=(_livetv.LTV3Version=GetVersionInfo(jobject[“LTV3Version”]))!=null;
// 
if(hasValidObject)
return generateSuccesful();
其他的
返回生成器未成功(
“无法分析请求中的版本,请重试。”);
}

我会尝试以下方法:

private VersionInfo GetVersionInfo(JToken token)
{
    if (token != null)
        return new VersionInfo(token.Value<string>());
    else
        return null;
}


public override Func<JObject, dynamic, string> VersionMethod => (jobject, parameters) => 
{
    bool hasValidObject = false;

    hasValidObject |= (_livetv.SoftwareVersion = GetVersionInfo(jobject["swVersion"])) != null;
    hasValidObject |= (_livetv.HardwareVersion = GetVersionInfo(jobject["hwVersion"])) != null;
    hasValidObject |= (_livetv.LTV2Version = GetVersionInfo(jobject["ltvVersion"])) != null;
    hasValidObject |= (_livetv.LTV3Version = GetVersionInfo(jobject["ltv3Version"])) != null;

    // <<<snip>>>

     if (hasValidObject)
         return GenerateSuccessful();
     else
         return GenerateUnsuccessful(
            "Unable to parse version from request, try again.");

}
private VersionInfo GetVersionInfo(JToken令牌)
{
if(令牌!=null)
返回新版本信息(token.Value());
其他的
返回null;
}
public override Func VersionMethod=>(作业对象,参数)=>
{
bool hasValidObject=false;
hasValidObject |=(_livetv.SoftwareVersion=GetVersionInfo(jobject[“swVersion]”))!=null;
hasValidObject |=(_livetv.HardwareVersion=GetVersionInfo(jobject[“hwVersion”]))!=null;
hasValidObject |=(_livetv.LTV2Version=GetVersionInfo(jobject[“ltvVersion”]))!=null;
hasValidObject |=(_livetv.LTV3Version=GetVersionInfo(jobject[“LTV3Version”]))!=null;
// 
if(hasValidObject)
return generateSuccesful();
其他的
返回生成器未成功(
“乌纳