.Net 2.0プロジェクトでC#4.0を使用する必要がある場合は、参照が見つからないようです。
はい、そうです。コンパイラにはその属性が必要です。 System.Core
であなた自身で定義するか、それを使うかはあなた次第です。特定のケースでは、System.Core
は.NET 3.5の一部であるため、オプションではありません。
3.5以降のバージョンにアップグレードしたら、この属性をプロジェクトからすべて削除して、System.Core
のものをそのまま使用することができます。
Visual Studio 2010にアップグレードした場合は、 C#4.0コンパイラを使用しています。
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class ExtensionAttribute : Attribute
{
}
}
それはがこの正確な名前空間でなければなりません:それはあなたが必要とするすべてはExtensionAttribute
であることを意味します。
あなたがどこかに持っていると(あなたがC#4.0コンパイラを使用しているので)、あなたが拡張メソッドを通常の方法を宣言することができます。その後、
public static class Extensions
{
public static string ToTitleCase(this string str)
{
//omitted
}
}
そして、拡張メソッドのようにそれを使用します。
var str = "hello world";
str.ToTitleCase();
実際にはExtensionAttribute
を何かの上に置く必要はありません。 C#4.0コンパイラがそれを行います。基本的に、すべてのコンパイラニーズは、ExtensionAttribute
という名前の属性を見つけることができなければなりません。
Brr、厄介なハック。しかし、動作します。後でアップグレードすることは、私が想像している属性を削除することを忘れてしまった場合、少し苦しいことになります。 –
@HansPassant私はそれが壊滅的になるとは思わない。コンパイラは、これまでに属性が「最も近い」ものだけを選択します。現在のアセンブリに1つがある場合は、そのアセンブリを代わりに使用します。私はコンパイラが*どの*属性が使われているとは思わないと思います。それが正しい(完全な)名前を持っている限り。しかし、合意した、それは少し醜いです。 – vcsjones
はい、これは私が避けたいと思っていたものでした。私が更新する必要があるアプリケーションは非常に堅牢で、古いですが6ヶ月ごとに更新する必要があり、企業の要件(誤って...)のためにフレームワークを更新できませんひどいハックだけどハックは、私が生産コードのすべてのコストを避ける傾向にあるものです。 – RLH