[英]How to avoid duplication logic in the code?
我有兩種方法:
static public async Task Delete( Guid id, string path, ViewModelCollection<ProfileData> collection )
{
var jsonText = await File.ReadAllTextAsync( path );
var jsonList = JsonConvert.DeserializeObject<List<ProfileData>>( jsonText );
if ( jsonList != null && jsonList.Any() )
{
var itemToDelete = jsonList
.FirstOrDefault( x => x.Id == id );
if ( itemToDelete != null )
{
jsonList.Remove( itemToDelete );
}
}
var output = JsonSerializer.Serialize( jsonList );
await File.WriteAllTextAsync( path, output );
var item = collection.FirstOrDefault( x => x.Id == id );
if ( item != null ) collection.Remove( item );
}
static public async Task Delete( Guid id, string path, ViewModelCollection<SubscriptionData> collection )
{
var jsonText = await File.ReadAllTextAsync( path );
var jsonList = JsonConvert.DeserializeObject<List<SubscriptionData>>( jsonText );
if ( jsonList != null && jsonList.Any() )
{
var itemToDelete = jsonList
.FirstOrDefault( x => x.Id == id );
if ( itemToDelete != null )
{
jsonList.Remove( itemToDelete );
}
}
var output = JsonSerializer.Serialize( jsonList );
await File.WriteAllTextAsync( path, output );
var item = collection.FirstOrDefault( x => x.Id == id );
if ( item != null ) collection.Remove( item );
}
我認為問題是立即可見的——ProfileData 只是更改為 SubscriptionData。 問題:如何避免這種情況?
我想要這個:
static public async Task Delete<T>(...){... var itemToDelete = jsonList.FirstOrDefault(x => x.Id == id ...)
問題是 x.Id 未知 class
問題是 x.Id 未知 class
聲明一個定義您的Id
屬性的接口IHasId
,並確保ProfileData
和SubscriptionData
都實現該接口。
然后,您可以按如下方式約束您的泛型方法聲明:
static public async Task Delete<T>(...) where T : IHasId
{ ... }
(顯然,如果您已經為定義Id
屬性的ProfileData
和SubscriptionData
設置了基數 class,則可以將通用參數限制為該基數 class。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.