如何将指定TypeScript泛型类型转换为对应C#语法?
把TypeScript类型转换成C#的可行方案
没问题,我来帮你把这些TypeScript类型转换成符合C#语法规范的写法~你原来想写的public class Excludable<T> : T where T : FilterValue行不通,是因为C#里类不能直接继承一个泛型类型参数——类只能继承具体的类或者接口,没法把T当作父类来用。下面给你两种常用的可行方案:
第一步:先定义基础的FilterValue和AreaFilterValue
先把TypeScript里的基础类型转换成C#类:
// 对应TS的FilterValue类型 public class FilterValue { public int Id { get; set; } public string Label { get; set; } } // 假设LocationTaxonomy是你已经定义好的类型(比如枚举或类) // 对应TS的AreaFilterValue类型 public class AreaFilterValue : FilterValue { // TS里的字面量类型"Area",在C#里可以用只读属性固定值 public string Type => "Area"; public LocationTaxonomy? Taxonomy { get; set; } }
方案一:组合模式(推荐,符合C#设计习惯)
用组合的方式,把T作为Excludable<T>的一个属性,而不是继承它:
public class Excludable<T> where T : FilterValue { // 存储原FilterValue类型的实例 public T Value { get; set; } // 对应TS里的可选isExcluded属性 public bool? IsExcluded { get; set; } }
使用示例
// 创建一个可排除的区域筛选值 var excludableArea = new Excludable<AreaFilterValue> { Value = new AreaFilterValue { Id = 1, Label = "北京市", Taxonomy = LocationTaxonomy.City // 假设这是LocationTaxonomy的枚举值 }, IsExcluded = false }; // 访问属性 Console.WriteLine(excludableArea.Value.Label); // 输出"北京市" Console.WriteLine(excludableArea.IsExcluded); // 输出"False"
这种方案的好处是不需要修改原有的FilterValue子类,灵活性很高,不管后续新增什么Filter子类,都可以套进Excludable<T>里。
方案二:接口+抽象类(贴近TS交叉类型的感觉)
如果你希望IsExcluded直接作为Filter子类的属性(类似TS里的交叉类型T & { isExcluded?: boolean }),可以用接口+抽象类的方式:
// 定义可排除的接口 public interface IExcludable { bool? IsExcluded { get; set; } } // 用抽象类把FilterValue和IExcludable组合起来,方便子类继承 public abstract class ExcludableFilterValue : FilterValue, IExcludable { public bool? IsExcluded { get; set; } } // 让AreaFilterValue继承这个抽象类 public class AreaFilterValue : ExcludableFilterValue { public string Type => "Area"; public LocationTaxonomy? Taxonomy { get; set; } }
使用示例
var excludableArea = new AreaFilterValue { Id = 1, Label = "上海市", Taxonomy = LocationTaxonomy.City, IsExcluded = true }; // 直接访问IsExcluded属性 Console.WriteLine(excludableArea.IsExcluded); // 输出"True"
这种方案的好处是属性直接挂载在实例上,和TS的交叉类型用法更接近,但需要修改原有的Filter子类继承关系。
内容的提问来源于stack exchange,提问作者Hakuna Matata
相关产品推荐
相关产品推荐

