私はこの辺りで同様の問題を探しましたが、私の問題の解決策を見つけることができませんでした。MyClassはいくつかのデータを保持し、異なる型間で型キャストを行います。
このエラーを回避するにはどうすればよいですか?
Program.MyClass型への標準的な変換がないため、「string」型の値をデフォルトパラメータとして使用することはできません。
Funcを試し、複数の引数を渡してデフォルトのパラメーターを処理できるように複数の関数のオーバーロードを宣言しました。これを達成するためのより良い方法があるはずです。うまくいけば、あなたが助けることができます。
私の問題を明確にするために、私はこのコードを作成しました:
using System;
public class Program
{
public class MyClass {
public string Value { get; set; }
public MyClass()
{
Value = "";
}
public MyClass(string s)
{
Value = s;
}
public override string ToString()
{
return this.Value;
}
}
// Causes CS1750
// A value of type 'string' cannot be used as default parameter
// because there are no standard conversions to type 'Program.MyClass'
public static string test2(string a, MyClass b = " with default text")
{
return a + b;
}
public static string test(string a, string b = " with default text")
{
return a + b;
}
public static void Main()
{
Console.WriteLine(test("test1"));
Console.WriteLine(test("test1", " with my text"));
}
}
それは完全には不可能です。エラーメッセージに記載されているように、標準の変換が必要です:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/conversions#standard-conversions
私たちにできることは、クラスの暗黙的な変換演算子を定義することだけです:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/user-defined-conversion-operators
あなたの場合、それは次のようになります。
public static implicit operator MyClass(string val) => new MyClass(val);
そして、テストメソッドを次のようなものに置き換えます。
public static string test(string a, MyClass b = null)
{
b = b ?? " with default text";
return a + b;
}
また、引数が1つしかない場合は、両方のテストメソッドの署名が同じであるため、コンパイラはどちらを使用するかわからないため、2番目のテストメソッドのデフォルト値を削除してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加