如何强制用户以两种类型之一输入方法参数的值而不重载

MBA*_*STO 1 c# parameters

我正在做一个 C# 项目,我有这个方法

    private static Encryption_Model Enc(byte[] PlainData,byte[] Key)
    {

        //Some logic code here

    }
Run Code Online (Sandbox Code Playgroud)

Key我希望用户以两种类型之一输入它的参数byte[]int.

有没有办法强制用户以两种类型之一输入 Key 参数byte[]int不使用重载?

提前致谢。

Cod*_*ter 5

不,重载就是为了这个。你为什么不想要那个?

当然,您可以添加两个默认参数并在两者都没有提供时抛出:

private static Encryption_Model Enc(byte[] plainData, byte[] keyBytes = null, int? keyInt = null)
{
    if ((keyBytes == null && keyInt == null) 
        || (keyBytes != null && keyInt != null))
    {
        throw new ArgumentException("Provide either keyBytes or keyInt");
    }
}
Run Code Online (Sandbox Code Playgroud)

但这很糟糕,因为现在您的方法必须弄清楚提供了哪个参数以及如何使用它们,并且它不提供编译时安全性。这样做:

private static Encryption_Model Enc(byte[] plainData, int key)
{
    var keyBytes = GetBytesFromInt(key); // Probably BitConverter.GetBytes()
    return Enc(plainData, keyBytes);
}

private static Encryption_Model Enc(byte[] plainData, byte[] key)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)