c# - 如何将泛型与充满常量的类一起使用?
问题描述
我希望我的意思很清楚。我有多个充满选项的静态类:
static class Thing1
{
public const string Name = "Thing 1";
// More const fields here.
}
static class Thing2
{
public const string Name = "Thing 2";
// More const fields here.
}
现在我想使用这些选项来创建一个包含这些类之一的内容的类。
public void Create<T>()
{
var foo = new Foo(T.Name);
foo.Prop = T.Something;
if (T.HasValue)
foo.Add(T.Value);
}
但这当然行不通。我会使用接口,但静态类不能实现接口。
有什么办法可以优雅地完成这项工作吗?制作Thing1
和Thing2
单身人士会工作,但这不是一个很好的解决方案。
我可以创建一个结构并将对象放入另一个静态类中,但我想知道您是否可以执行上述操作。
解决方案
好吧,您可以创建一个接口并使您的类成为非静态类并从该接口继承:
public class Thing1 : IThing
{
public string Name { get; } = "Thing 1";
// More const fields here.
}
public class Thing2 : IThing
{
public string Name { get; } = "Thing 2";
// More fields here.
}
interface IThing
{
string Name { get; }
}
然后将它与类型参数约束一起用于您的方法:
public void Create<T>(T t) where T : IThing
{
// Now compiler knows that `T` has all properties from `IThing`
var foo = new Foo(t.Name);
foo.Prop = t.Something;
if (t.HasValue)
foo.Add(t.Value);
}
推荐阅读
- python - Python 将输入与变量混合
- python - Conda - 无法完全删除环境
- java - 从jsoup的嵌套href中检索数据
- http - HTTP服务器HandleFunc循环超时?
- css - 有没有办法使用 CSS 创建一个重叠在框边框顶部的标题?
- iis - 上传报告失败 - HTTP 代码 413:页面未显示,因为请求实体太大
- linkedin - 如何获取 LinkedIn 提及的成员/组织的 URN
- sonos - 如何通过 Sonos API 播放指定的 Google Play 音乐资源(专辑)
- debugging - 如何从另一个项目调试我自己的 go 模块
- javascript - 使用键动态构建最小值和最大值