You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C# Record自动兼容宽泛类型(类似TypeScript特性)

在C#中模拟TypeScript的结构类型兼容

C#是标称类型系统,和TypeScript的结构类型系统本质不同——TS只要对象结构匹配就自动兼容,而C#需要类型间有明确的继承/实现关系才能兼容。要实现你要的「带命名属性、类似元组的结构,且能兼容更宽泛的参数」,可以通过以下几种方案模拟:

方案1:多接口+记录类型(类型安全,推荐)

预先定义对应不同属性组合的接口,让你的核心结构实现这些接口,这样就能把结构实例传给接受任意接口的函数。

示例代码:

// 定义单个属性的接口
public interface IHasA { string A { get; } }
public interface IHasB { bool B { get; } }

// 实现所有需要的接口的记录(类似TS的对象结构,同时支持解构)
public record MyRecord(string A, bool B) : IHasA, IHasB;

// 接受单个属性接口的函数
public void ProcessA(IHasA input)
{
    Console.WriteLine($"A的值:{input.A}");
}

public void ProcessB(IHasB input)
{
    Console.WriteLine($"B的值:{input.B}");
}

// 调用示例
var fullRecord = new MyRecord("Hello", true);
ProcessA(fullRecord); // 直接兼容,因为MyRecord实现了IHasA
ProcessB(fullRecord); // 直接兼容,因为MyRecord实现了IHasB

这种方式完全保留编译时类型安全,缺点是需要提前定义所有可能用到的属性接口,适合属性组合固定的场景。

方案2:泛型+模式匹配(灵活但弱类型安全)

如果不想预先定义接口,可以用泛型方法配合模式匹配,在编译时推导属性存在性(C# 8+支持):

public void ProcessA<T>(T input) where T : notnull
{
    if (input is { A: string a })
    {
        Console.WriteLine($"A的值:{a}");
    }
    else
    {
        throw new ArgumentException("输入对象必须包含string类型的A属性");
    }
}

public void ProcessB<T>(T input) where T : notnull
{
    if (input is { B: bool b })
    {
        Console.WriteLine($"B的值:{b}");
    }
    else
    {
        throw new ArgumentException("输入对象必须包含bool类型的B属性");
    }
}

// 调用示例
var fullObj = new { A = "Hi", B = false }; // 匿名类型
ProcessA(fullObj);
ProcessB(fullObj);

var record = new MyRecord("Test", true);
ProcessA(record);
ProcessB(record);

这种方式不用预先定义接口,支持任意带对应属性的类型,但错误是运行时抛出,编译时无法提前检查。

方案3:命名元组+解构(轻量但手动转换)

如果你的结构类似元组,可使用命名元组,调用时手动解构需要的属性:

// 接受仅含B的命名元组的函数
public void ProcessB((bool B) input)
{
    Console.WriteLine($"B的值:{input.B}");
}

// 调用示例
var fullTuple = (A: "Hello", B: true);
ProcessB((B: fullTuple.B,)); // 手动解构出需要的属性

这种方式轻量,但每次调用都需要手动提取属性,不如TS自动兼容便捷。

关键说明

C#没有TypeScript那种原生的结构类型兼容,所有方案都是模拟。如果需要极致的灵活性,可考虑使用dynamic类型,但会完全失去类型安全,不推荐在生产代码中使用。

内容的提问来源于stack exchange,提问作者Linus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:22:51