In [142]: A!=0
Out[142]:
array([[ True, False, True],
[False, True, True],
[ True, True, False],
[False, True, True]])
问题是,我实际上不能添加多个对象,例如:
public async Task LoadObjectsCacheAsync<T>(params T[] objs) where T : new(), IStoreableObject
{
using (var con = new SqlConnection(_connectionString))
{
await con.OpenAsync().ConfigureAwait(false);
foreach (var obj in objs)
{
if (await SendScalarAsync<int>($"SELECT COUNT(Id) From {obj.TableName};", con).ConfigureAwait(false) != 0)
{
var ids = YieldData<ulong>($"SELECT Id FROM {obj.TableName};", con).ToImmutableArray();
foreach (var id in ids)
{
var newObj = await LoadObjectAsync(new T() { Id = id }).ConfigureAwait(false);
if (!Cache.ContainsKey(newObj.Id)) Cache.TryAdd(newObj.Id, newObj);
else Cache[newObj.Id] = newObj;
}
}
}
}
}
有效,但是...
await LoadObjectsCacheAsync(new Foo());
await LoadObjectsCacheAsync(new Bar());
不是
IStoreableObject[] objs = {new Foo(), new Bar()};
await LoadObjectsCacheAsync(objs);
这仅在我删除方法上的Error CS0310 'IStoreableObject' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'SQLExpressClient.LoadObjectsCacheAsync<T>(params T[])'
约束时才有效,但我需要用于缓存,否则,添加到缓存中的所有对象都将引用同一对象(已经过测试且不适用于它应该做什么),有人对我该如何解决有任何想法吗?我尝试阅读2个与此相关的问题,但没有一个得到我所需的答案。我还尝试创建一个虚拟结构来摆脱new
约束,但是它不能按预期工作,因为方法new
仅会加载结构的Id和Name,而对象的属性不会被加载,因为它们在虚拟结构中不存在。我将不胜感激