[英]c# Merge service into one
我有一個將從 Web API 調用的服務,我想看看是否有辦法使用傳入的模型將兩者結合在一起?
我可以使用 getType 之類的東西來查看對象的類型嗎?
public ResultStatus InsertUsersDownload(UserLog userLog)
{
return Db.UsersDownload(userLog);
}
public ResultStatus InsertNonUsersDownload(NonUserLog nonUserLog)
{
return Db.NonUsersDownload(nonUserLog);
}
模型
您可以使用is
運算符來檢查類型。 然后你的方法看起來像這樣:
public ResultStatus InsertDownload(object log)
{
if(log is UserLog userLog)
{
return glDb.UsersDownload(userLog);
}
else if(log is NonUserLog nonUserLog)
{
return glDb.NonUsersDownload(nonUserLog);
}
else
{
throw new ArgumentException("invalid type", nameof(log));
}
}
如果UserLog
和NonUserLog
共享一個公共基類,您也可以使用它代替object
。
但是您真的應該考慮這是否會改進您的代碼。 如果你必須檢查一個類型並根據類型做不同的事情,這通常是類設計不好的標志。
編輯:我剛剛看到你的模型代碼。 它們的唯一區別是您的UserLog
類具有附加屬性IsProfessional
。 也許您可以通過添加額外的屬性IsUser
將您的類合並為一個:
public class Log
{
public string CustomerId { get; set; }
public string FileName { get; set; }
public string Remote_Addr { get; set; }
public string Local_Addr { get; set; }
public string Http_User_Agent { get; set; }
public string Http_Referer { get; set; }
public bool? IsMobile { get; set; }
public int? DeviceId { get; set; }
public string AppType { get; set; }
public bool? IsProfessional { get; set; }
public bool IsUser { get; set; }
}
然后你可以這樣寫你的函數:
public ResultStatus InsertDownload(Log log)
{
if(log.IsUser)
{
return glDb.UsersDownload(log);
}
else
{
return glDb.NonUsersDownload(log);
}
}
這樣做的優點是方法簽名比將object
作為參數的方法更具表現力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.