gpt4 book ai didi

c# - 将列表添加到系统属性

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:34 25 4
gpt4 key购买 nike

我创建了属于 MEF 的自定义属性,我想在其中定义与类相关的 ID 列表,以便我可以查询它们。

此外,该类本身必须包含定义,这很重要,这就是我考虑使用的原因:

[SignalSystemData("ServiceIds", new List<int>(){1})]

我该如何进行?

我的搜索实现如下:

        var c = new Class1();
var v = c.EditorSystemList;

foreach (var lazy in v.Where(x=>x.Metadata.LongName=="ServiceIds"))
{
if (lazy.Metadata.ServiceId.Contains(serviceIdToCall))
{
var v2 = lazy.Value;
// v2 is the instance of MyEditorSystem
Console.WriteLine(serviceIdToCall.ToString() + " found");

}else
{
Console.WriteLine(serviceIdToCall.ToString() + " not found");
}
}

我的带有定义的导出类应该如下所示:

[Export(typeof(IEditorSystem))]
[SignalSystemData("ServiceIds", new List<int>{1})]
public class MyEditorSystem1 : IEditorSystem
{
void test()
{
Console.WriteLine("ServiceID : 1");
}
}


public interface IEditorSystem
{
}

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class SignalSystemDataAttribute : ExportAttribute
{
public SignalSystemDataAttribute(string longName, List<int> serviceId)
: base(typeof (IEditorSystem))
{
LongName = longName;
ServiceId = serviceId;
}

public string LongName { get; set; }
public List<int> ServiceId { get; set; }

}

public interface IEditorSystemMetadata
{
string LongName { get; }
List<int> ServiceId { get; }
}

最佳答案

要解决编译时间常数问题,您有以下选择:

  • 使用特殊格式的字符串(即,如您所建议的,以逗号分隔的整数列表)。
  • 使用多个重载,每个重载具有不同数量的 ID 参数。如果要传递的 ID 太多,这会变得很困惑。
  • 使用 params int[] ids 作为构造函数的最后一个参数。这会起作用,但不符合 CLS - 如果这对您很重要的话。
  • 最容易使用数组 int [] 参数。

当然你也可以使用以上的组合。有几个重载,比如 1 到 5 个 ID 参数,并为那些(希望如此)极端情况提供一个字符串参数或 params int[] 参数,其中重载参数是不够的。

更新:刚找到this问题/答案。可能不会重复,但处理相同的问题(大部分)。

关于c# - 将列表添加到系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10380563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com