C# dotnetcore-需要创建一个泛型扩展方法,该方法有两个泛型,一个是扩展
我正在尝试创建一个通用的CSV转换静态方法。它具有实体-扩展。。让它成为“T”,但是我还需要基于实体包含不同的上下文。有两个数据库,每个数据库都有一个郊区实体和DBs上下文 我怎么会有两个泛型变量,其中一个是扩展。。 这是我开始的:C# dotnetcore-需要创建一个泛型扩展方法,该方法有两个泛型,一个是扩展,c#,.net-core,entity-framework-core,C#,.net Core,Entity Framework Core,我正在尝试创建一个通用的CSV转换静态方法。它具有实体-扩展。。让它成为“T”,但是我还需要基于实体包含不同的上下文。有两个数据库,每个数据库都有一个郊区实体和DBs上下文 我怎么会有两个泛型变量,其中一个是扩展。。 这是我开始的: public static Suburb FromCsv(string csvLine, CATALOGContext context) { if (csvLine == null) throw new ArgumentNullExc
public static Suburb FromCsv(string csvLine, CATALOGContext context)
{
if (csvLine == null) throw new ArgumentNullException(nameof(csvLine));
if (context == null) throw new ArgumentNullException(nameof(context));
var values = csvLine.Split(',');
if (context.States == null) return null;
if (values.Length <= 3) return null;
var suburb = new Suburb
{
PostCode = values[0],
SuburbName = values[1],
State = context.States.FirstOrDefault(s => s.StateShortName == values[2]),
Latitude = Convert.ToDouble(values[3], CultureInfo.CurrentCulture),
Longitude = Convert.ToDouble(values[4], CultureInfo.CurrentCulture)
};
return suburb;
}
publicsv(字符串csvLine,CATALOGContext)
{
如果(csvLine==null)抛出新的ArgumentNullException(nameof(csvLine));
如果(context==null)抛出新的ArgumentNullException(nameof(context));
var值=csvLine.Split(',');
if(context.States==null)返回null;
如果(values.Length s.StateShortName==值[2]),
纬度=Convert.ToDouble(值[3],CultureInfo.CurrentCulture),
经度=Convert.ToDouble(值[4],CultureInfo.CurrentCulture)
};
返回郊区;
}
这是我所拥有的,但显然是不对的
public static T FromCsv<T, I>(this T source, string csvLine, I context)
{
if (csvLine == null) throw new ArgumentNullException(nameof(csvLine));
if (context == null) throw new ArgumentNullException(nameof(context));
var values = csvLine.Split(',');
if (context.States == null) return null;
if (values.Length <= 3) return null;
var suburb = new Suburb
{
PostCode = values[0],
SuburbName = values[1],
State = context.States.FirstOrDefault(s => s.StateShortName == values[2]),
Latitude = Convert.ToDouble(values[3], CultureInfo.CurrentCulture),
Longitude = Convert.ToDouble(values[4], CultureInfo.CurrentCulture)
};
return suburb;
}
public static T FromCsv(此T源代码,字符串csvLine,I上下文)
{
如果(csvLine==null)抛出新的ArgumentNullException(nameof(csvLine));
如果(context==null)抛出新的ArgumentNullException(nameof(context));
var值=csvLine.Split(',');
if(context.States==null)返回null;
如果(values.Length s.StateShortName==值[2]),
纬度=Convert.ToDouble(值[3],CultureInfo.CurrentCulture),
经度=Convert.ToDouble(值[4],CultureInfo.CurrentCulture)
};
返回郊区;
}
它不知道这是一个dbContext(context),所以我需要使用where子句,我不确定如何做到这一点。此外,每个dbContext都有一个“状态”,但由于上述原因,这是一个错误——不知道它是一个上下文
我怎么可以有多个泛型,其中一个是扩展-实体,另一个是上下文(我甚至不确定是否可以有),您可以将其用于不同的数据库上下文等?您不能使用特定的实体返回T。您必须使用T返回T。为什么不使用这个简单的泛型
public enum DBcon
{
DB1, DB2
}
public static Suburb FromCsv(string csvLine, DBcon con)
{
var context = con == DBcon.DB1 ? new CATALOGContext() : new DB2Context();
if (csvLine == null) throw new ArgumentNullException(nameof(csvLine));
if (context == null) throw new ArgumentNullException(nameof(context));
var values = csvLine.Split(',');
if (context.States == null) return null;
if (values.Length <= 3) return null;
var suburb = new Suburb
{
PostCode = values[0],
SuburbName = values[1],
State = context.States.FirstOrDefault(s => s.StateShortName == values[2]),
Latitude = Convert.ToDouble(values[3], CultureInfo.CurrentCulture),
Longitude = Convert.ToDouble(values[4], CultureInfo.CurrentCulture)
};
return suburb;
}
公共枚举DBcon
{
DB1,DB2
}
公共静态CSV(字符串csvLine、DBcon con)
{
var context=con==DBcon.DB1?新建CATALOGContext():新建DB2Context();
如果(csvLine==null)抛出新的ArgumentNullException(nameof(csvLine));
如果(context==null)抛出新的ArgumentNullException(nameof(context));
var值=csvLine.Split(',');
if(context.States==null)返回null;
如果(values.Length s.StateShortName==值[2]),
纬度=Convert.ToDouble(值[3],CultureInfo.CurrentCulture),
经度=Convert.ToDouble(值[4],CultureInfo.CurrentCulture)
};
返回郊区;
}
首先,返回您希望扩展方法使用的相同类型似乎不正确。在郊区
的情况下,您必须拥有它的一个实例才能调用扩展方法,然后它返回一个新实例?我不清楚那应该是什么。至于context参数,可以使用基本DbContext类型而不是泛型吗?CATALOGContext
不是继承了DbContext吗?你能举一个例子说明你如何使用扩展方法吗?同样,如果泛型扩展方法不知道类型,它如何知道要设置哪些属性?或者哪些列映射到哪个属性?你研究过使用对象映射器吗?在我看来,这种方法负责太多的事情,比如拆分字符串、从数据库获取数据以及创建类的新实例。此外,将任何上下文传递给静态方法都是不好的做法。你有理由使用静态方法吗?这样就可以了。。。我对泛型不感兴趣,只是不想让它们中的两个几乎相同而已。所以谢谢你把这个贴出来。