タグ付けされた質問 「c#-4.0」

C#4.0では、動的オブジェクト、COMの相互運用性の向上、一般的な共分散と逆分散、オプションの名前付きパラメーターなどの機能が導入されました。質問がC#4.0固有の機能に特に関係する場合は、このタグを使用してください。質問がC#4.0の機能に固有でない場合は、C#タグを使用する必要があります。

10
相互運用タイプを埋め込むことはできません
C#で.NET 4.0フレームワーク(beta2)にWebアプリケーションを作成しています。 「ActiveHomeScriptLib」というアセンブリを使用しようとすると、次のエラーが発生します。 Interopタイプ「ActiveHomeScriptLib.ActiveHomeClass」を埋め込むことはできません。代わりに適切なインターフェースを使用してください。 フレームワークをバージョン3.5に変更しても、エラーは発生しません。 相互運用タイプとは何ですか?これは、4.0フレームワークを使用した場合にのみ発生するのはなぜですか?

10
ExpandoObjectの真のメリットは何ですか?
ExpandoObjectの .NET 4に追加されたクラスでは、任意の実行時にオブジェクトにプロパティを設定することができます。 Dictionary<string, object>、または本当にハッシュテーブルを使用するよりも優れている点はありますか?私の知る限り、これはハッシュテーブルにすぎず、もう少し簡潔な構文でアクセスできます。 たとえば、これはなぜですか: dynamic obj = new ExpandoObject(); obj.MyInt = 3; obj.MyString = "Foo"; Console.WriteLine(obj.MyString); 次のものよりも本当に良い、または大幅に異なる: var obj = new Dictionary<string, object>(); obj["MyInt"] = 3; obj["MyString"] = "Foo"; Console.WriteLine(obj["MyString"]); 実行時に決定されるタイプを使用していることが明らかでない場合を除いて、任意のディクショナリタイプを使用する代わりにExpandoObjectを使用することによって得られる実際の利点は何ですか。
587 c#  .net  .net-4.0  c#-4.0 

8
タスクとスレッドの違いは何ですか?
C#4.0ではTask、System.Threading.Tasks名前空間にあります。間の真の違いは何であるThreadとはTask。私は自分で学ぶためにいくつかのサンプルプログラム(MSDNから取ったヘルプ)をしました Parallel.Invoke Parallel.For Parallel.ForEach しかし、アイデアがあまり明確ではないため、多くの疑問があります。 Stackoverflowで同様の種類の質問を最初に検索しましたが、この質問のタイトルでは同じ結果を得ることができなかった可能性があります。同じ種類の質問が以前にここに投稿されていることを誰かが知っている場合は、リンクのリファレンスを提供してください。

4
インターフェースで定義されたC#4オプションパラメーターがクラスの実装に適用されないのはなぜですか?
あなたがインターフェイス上でオプションのパラメータを指定した場合、私はC#4でのオプションのパラメータを持つことに気づいtは、ドン任意の実装クラスでそのパラメータのオプションを行う必要があります。 public interface MyInterface { void TestMethod(bool flag = false); } public class MyClass : MyInterface { public void TestMethod(bool flag) { Console.WriteLine(flag); } } したがって: var obj = new MyClass(); obj.TestMethod(); // compiler error var obj2 = new MyClass() as MyInterface; obj2.TestMethod(); // prints false オプションのパラメーターがこのように機能するように設計されている理由を誰かが知っていますか? 一方では、インターフェースで指定されたデフォルト値をオーバーライドする機能は便利だと思いますが、正直なところ、インターフェースでデフォルト値を指定できるかどうかは、実装の決定であるためわかりません。 一方、この切断は、具象クラスとインターフェースを常に交換して使用できるわけではないことを意味します。もちろん、これは実装でデフォルト値が指定されている場合は問題になりませんが、具体的なクラスをインターフェースとして公開している場合(たとえば、IOCフレームワークを使用して具体的なクラスを挿入する場合)、実際にはありません。呼び出し側は常にデフォルト値を提供する必要があるため、デフォルト値を持つポイント。

5
.NET NewtonSoft JSONは別のプロパティ名にマップをデシリアライズします
外部から受け取った以下のJSON文字列があります。 { "team":[ { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"home", "score":"22", "team_id":"500" } }, { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"away", "score":"30", "team_id":"600" } } ] } 私のマッピングクラス: public class Attributes { public string eighty_min_score { get; set; } public string home_or_away { get; set; } public string score { get; set; } public …

4
Parallel.ForEachとTask.Factory.StartNew
以下のコードスニペットの違いは何ですか?どちらもスレッドプールスレッドを使用しませんか? たとえば、コレクション内の各アイテムの関数を呼び出したい場合、 Parallel.ForEach<Item>(items, item => DoSomething(item)); vs foreach(var item in items) { Task.Factory.StartNew(() => DoSomething(item)); }




15
タプルクラスでの「Item1」、「Item2」よりも優れた命名
タプルクラスを使用する方法はありますが、その中のアイテムの名前を提供しますか? 例えば: public Tuple<int, int, int int> GetOrderRelatedIds() これにより、OrderGroupId、OrderTypeId、OrderSubTypeId、OrderRequirementIdのIDが返されます。 私のメソッドのユーザーにどちらがどれであるかを知らせておくとよいでしょう。(メソッドを呼び出すと、結果はresult.Item1、result.Item2、result.Item3、result.Item4になります。どちらがどれかは明確ではありません。) (私はこれらすべてのIDを保持するクラスを作成できることを知っていますが、これらのIDにはすでに独自のクラスがあり、この1つのメソッドの戻り値のクラスを作成するのはばかげているように見えます。)
204 c#  c#-4.0  tuples 

10
HttpListenerアクセス​​が拒否されました
HTTPサーバーをC#で作成しています。 関数HttpListener.Start()を実行しようとするHttpListenerExceptionと、格言が出ます "アクセスが拒否されました"。 Windows 7で管理モードでアプリを実行すると、正常に動作します。 管理モードなしで実行できますか?はいの場合はどうですか?そうでない場合、実行を開始した後にアプリを管理モードに変更するにはどうすればよいですか? using System; using System.Net; namespace ConsoleApplication1 { class Program { private HttpListener httpListener = null; static void Main(string[] args) { Program p = new Program(); p.Server(); } public void Server() { this.httpListener = new HttpListener(); if (httpListener.IsListening) throw new InvalidOperationException("Server is currently running."); httpListener.Prefixes.Clear(); …


4
C#コンパイラはどのようにしてCOMタイプを検出しますか?
編集:私は結果をブログ投稿として書きました。 C#コンパイラは、COMタイプを魔法のように扱います。たとえば、このステートメントは正常に見えます... Word.Application app = new Word.Application(); ...それがApplicationインターフェースであることを理解するまで。インターフェイスのコンストラクターを呼び出しますか?ヨイクス!これは実際にはへの呼び出しとへの呼び出しに変換さType.GetTypeFromCLSID()れActivator.CreateInstanceます。 さらに、C#4では、refパラメーターに非ref引数を使用でき、コンパイラーはローカル変数を追加して参照渡しし、結果を破棄します。 // FileName parameter is *really* a ref parameter app.ActiveDocument.SaveAs(FileName: "test.doc"); (うん、たくさんの引数が足りません。オプションのパラメーターはいいのではないですか?:) 私はコンパイラの動作を調査しようとしています、そして私は最初の部分を偽造することに失敗しています。私は問題なく2番目の部分を行うことができます。 using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; [ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface Dummy { void Foo(ref int x); } class Test { static void Main() { Dummy dummy = null; dummy.Foo(10); …


7
いつCancellationTokenSourceを破棄するのですか?
クラスCancellationTokenSourceは使い捨てです。Reflectorをざっと見てみるKernelEventと、(ほとんどの場合)管理されていないリソースの使用がわかります。にCancellationTokenSourceはファイナライザがないため、破棄しない場合、GCはそれを行いません。 一方、MSDNの記事「マネージスレッドでのキャンセル」に記載されているサンプルを見ると、トークンを破棄するコードスニペットは1つだけです。 コードでそれを処分する適切な方法は何ですか? using待機しないと、並列タスクを開始するコードをラップできません。そして、あなたが待たない場合にのみキャンセルをすることは理にかなっています。 もちろんContinueWith、Dispose電話でタスクを追加することもできますが、その方法ですか? 同期されずに最後に何かを行うキャンセル可能なPLINQクエリについてはどうですか?言いましょう.ForAll(x => Console.Write(x))か? 再利用できますか?同じトークンを複数の呼び出しに使用してから、ホストコンポーネントと一緒に破棄できますか(UIコントロールなど)。 ResetクリーンアップIsCancelRequestedとTokenフィールド化のメソッドのようなものがないため、再利用できないと思います。したがって、タスク(またはPLINQクエリ)を開始するたびに、新しいタスクを作成する必要があります。本当ですか?はいの場合、私の質問はDispose、それらの多くのCancellationTokenSourceインスタンスに対処するための正しい推奨される戦略は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.