タグ

C#に関するrryuのブックマーク (27)

  • 引数 null チェックの !!、取りやめ

    2月にブログに書きましたが、 Visual Studio 17.1 Preview 3の頃、C# 11 候補として「引数の null チェック」構文が入っていました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 今現在(VS 17.2 Preview 5)でもこの構文は生きているんですが、次(たぶん、17.2正式リリースでも17.3 Preview 1でも)でいったん取りやめになるそうです。 取りやめの経緯 C# チームとしては、今、Preview リリースをしてみて反応を見てその後どうするかを決めたりしているわけですが。 LangVersion preview があるのはそのためです。 とはいえ、普通に考えて、Preview 機能まで追いかけている人がそんなに多いわけもなく、 正式リリースされるまでどんな機能が追加されてい

    引数 null チェックの !!、取りやめ
  • .NET 5 を使いたい理由6選 - Qiita

    速いので使いたい 私の場合、ここ数か月で一番素晴らしいニュースだと感じたブログがこれでした。 https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-5/ .NET5 がどれだけパフォーマンス向上のために努力してきたかという内容です。 ものすごいボリュームで読むのが大変でしたが、満足感のある記事でした。 この記事を読んだだけでも、早く.NET 5 を使いたいという気持ちになりました。 パフォーマンスが良くなったという知らせはいつでもエンジニアの気持ちを高揚させるのだと思います。 使いたい理由1 : GCが高速化した いくつものアプローチを重ねたことが記されていました。 GCが到達可能オブジェクトをマークする処理の情報を他のスレッドでも流用できるようにして、各スレッド内の同処理の作業量を一部省略可能にした G

    .NET 5 を使いたい理由6選 - Qiita
    rryu
    rryu 2020/11/28
    C#は言語がどうというよりもWindows以外で環境を用意するのが大変そうでなかなか手が出ない。VSCodeと.NET Coreで簡単になっているはずなのだが…
  • メモリが足りていても OutOfMemoryException が出る可能性がある (C#) - Qiita

    Microsoft の OutOfMemoryException Class のドキュメントに以下のような記載があります. An OutOfMemoryException exception has two major causes: - You are attempting to expand a StringBuilder object beyond the length defined by its StringBuilder.MaxCapacity property. 適当訳: OutOfMemoryException 例外には2つの大きな要因があります: - StringBuilder.MaxCapacity プロパティで定義された長さを超えて StringBuilder オブジェクトを拡大しようとしている。 つまりメモリが足りていたとしても、StringBuilder に Ma

    メモリが足りていても OutOfMemoryException が出る可能性がある (C#) - Qiita
    rryu
    rryu 2020/10/11
    StringBuilder.MaxCapacityのデフォルト値は実装固有で利用可能なメモリ上限が設定されることを意図していたのだと思うが、実装メモリが4GB以上あるのが普通な現在では謎な挙動になっていしまったという。
  • C#に潜むstructの罠 - KAYAC engineers' blog

    こんにちは。技術部平山です。 この記事ではC#のstructを使った際にはまった罠について書きます。 Unityでの体験を軸にお話しますが、Unityに限ったことではないかと思います。 お急ぎの方のために結論を申しあげますと、structを使うなとなります。 どうしてもstructを使いたい気分になった時に、罠にはまって時間を無駄にする覚悟をした上で使いましょう。 未来に活きる良い失敗ができると思いますし、最終的には製品の性能も上がるとは思いますが、 structを使わないといけない理由は、たぶんありません。なくても製品は作れます。 しかし、一回もstructと書かなかったとしても、C#で書く限りstructからは逃れられないのです。 (2019/04/10) 末尾に話を単純化しすぎた点について補足をいたしました。 structとは C#の型にはclassとstructがあります。 ...

    C#に潜むstructの罠 - KAYAC engineers' blog
    rryu
    rryu 2019/04/10
    mutableな値型を作ってはいけないというだけな気も。Vector3.Set()が罠すぎるが…
  • Null 非許容な参照型 - Qiita

    この記事について この記事は2017年 C# Advent Calendar 12月9日の記事です。 C# 8.0に向けて検討中で、11/15にプレビュー版が公開された C# の新機能「nullable reference types」について説明するものです。 "nullable reference types" を直訳するなら「Null 許容参照型」になるかと思いますが、この機能の実態を一言で言うと、参照型がnullを 可能な限り受け入れない ようにするもの、と考えたほうがいいでしょう。そのあたりのことを説明していきます。 Disclaimer: この記事は11/15のプレビュー版を前提にしたものです。これはあくまで現時点での 仕様に関する議論 を形にしたプロトタイプでしかなく、今後の議論によって仕様も実装も大きく変わる可能性があると思っていたほうがいいでしょう。CTP (Commun

    Null 非許容な参照型 - Qiita
    rryu
    rryu 2017/12/09
    互換性を捨ててデフォルトを非nullにするのか。果たしてそんな夢のようなことができるのか…
  • csharp > string > 改行の数のカウント > return s.Count( c => c == '\n' ) + 1; > 遅いらしい - Qiita

    csharp > string > 改行の数のカウント > return s.Count( c => c == '\n' ) + 1; > 遅いらしいC#performancestringOperation#migrated

    csharp > string > 改行の数のカウント > return s.Count( c => c == '\n' ) + 1; > 遅いらしい - Qiita
    rryu
    rryu 2015/11/20
    string.Count(Func<Char, Boolean>)が異様に遅いのはFuncの呼び出しのオーバーヘッドなんだろうか。
  • 式木(Expression Trees)

    実装上、ほとんどのものが、生成メソッドの名前と、NodeType 列挙子の名前はそろえてあるようです。 (条件演算子とメンバーアクセスだけ例外。 条件演算子は Expression.Condition で生成するけど、NodeType は Conditional。 メンバーアクセスは Expression.MakeMemberAccess で生成するけど、NodeType は MemberAccess。) 下準備 百聞は一見にしかずということで、 次節以降では、ラムダ式と式木の対応関係を実例を挙げて紹介していきます。 それに先立って、いくつか補助関数や変数を用意しておきます。 まず、Expression 型を作りやすくするために (型推論が働きやすくするために)、 以下のような補助関数を用意します。 static partial class Make { public static Exp

    式木(Expression Trees)
    rryu
    rryu 2015/05/29
  • neue cc - Expression Treeのこね方・入門編 - 動的にデリゲートを生成してリフレクションを高速化

    Expression Treeは、IQueryableの中心、Code as Dataなわけですが、それ以外にも用途は色々あります。ただたんに名前を取り出すだけ(考えてみると贅沢な使い方よね)とか、デリゲートを生成したりとか。varはLinqのために導入されたものだからそれ以外に無闇に使うのは良くない(キリッ とか言う人は、式木も同じ考えなんですかね、匿名型へも同じ態度で?導入された、そして発展させたのはLinqだとしても、別にそれ以外に使ってもいいんだよって。縛られた考えイクナイ。 というわけで、今更に、初歩からの式木再入門。特に.NET 4から大幅に拡張されて式だけじゃなく文までいけるようになって、何でも表現出来るようになりました。式木の用途は多岐に渡るわけですが、今回はリフレクションの高速化をお題にしたいと思います。プロパティ名の文字列からPropertyInfoを取ってGetVal

    rryu
    rryu 2015/05/22
  • C# 6.0で知っておくべき12の新機能

    Visual Studio 2015正式版のリリースで利用可能になったC#言語の最新バージョン「6.0」の新機能を解説する。CTP 5→正式版に合わせて改訂。 連載 INDEX 次回 → 「C# 6.0」と呼ばれているC#の最新バージョンは、Visual Studio 2015*1で利用可能になっている。 この最新バージョンでは、「.NET Compiler Platform」(コード名:“Roslyn”)と呼ばれる新しいコンパイラーが導入されており、静的解析APIの提供など、コンパイラーまわりに大きな変更が行われている。一方、言語機能に目を向けると、async/awaitという大きな機能が追加されたC# 5.0に比べると、一つ一つの新機能自体は小さい。しかし、それらはプログラムをより書きやすくするための機能なので、C#開発者にとってはやはり重要なアップデートとなっている。 そして、これら

    rryu
    rryu 2015/02/09
    良く文法的に破綻しないな……
  • 方法 : 送信の競合を検出および解決する (LINQ to SQL)

    LINQ to SQL には、複数のユーザーがデータベースを変更するために生じる競合を、検出および解決するための多くのリソースが用意されています。 詳細については、「方法 : 変更の競合を管理する (LINQ to SQL)」を参照してください。 使用例 ChangeConflictException 例外をキャッチする try/catch ブロックの例を次にします。 各競合のエンティティおよびメンバー情報が、コンソール ウィンドウに表示されます。 メモ ' Imports System.Reflection Dim newCust As New Customer() newCust.City = "Auburn" newCust.CustomerID = "AUBUR" newCust.CompanyName = "AubCo" db.Customers.InsertOnSubmit(n

    方法 : 送信の競合を検出および解決する (LINQ to SQL)
    rryu
    rryu 2014/09/08
  • neue cc - Unity + iOSのAOTでの例外の発生パターンと対処法

    Unity、はUnity3Dのほうの話ですが、それで開発していてiOS実機にデプロイして確認すると、以下の様なエラーに悩まされると思います! System.ExecutionEngineException: Attempting to JIT compile method ひぎぃ!怖い!これはiOSはネイティブコードしか許可していないので、MonoのAOT(Ahead-Of-Time)コンパイラ経由でネイティブコード変換されるんですが、それの関係で色々な制限があるからなのですね。さて、制限があるのはshoganaiんですが、引っかかるのは痛いです、めっちゃ痛いです、辛いです。 というわけで、どういうコードを書けば発生するのか、というのを並べてみました。どうすれば発生するのか分かれば、自然に避けられますからね。そのうえで、幾つかのものはちょっとしたハックで防げるので、それも述べます。あとは、

    rryu
    rryu 2014/07/25
    ラムダとかでJITされて実行されるところが事前コンパイルできずに残っていると死ぬというということなのだと思うが、なんというか地雷原過ぎる。
  • テキスト ファイルから読み取る方法 - C# プログラミング ガイド

    例 class ReadFromFile { static void Main() { // The files used in this example are created in the topic // How to: Write to a Text File. You can change the path and // file name to substitute text files of your own. // Example #1 // Read the file as one string. string text = System.IO.File.ReadAllText(@"C:\Users\Public\TestFolder\WriteText.txt"); // Display the file contents to the console. Variabl

    rryu
    rryu 2014/07/11
    System.IO.File.ReadAllText()など。
  • 初めてのMac向けC#開発環境「Xamarin.Mac」

    C#言語&.NET(厳密にはMono)を使ってMac OS X向けCocoaアプリ(Mac App Store対応)を開発できる「Xamarin.Mac」(ザマリン・ドットマック)が昨年末(米国時間で2012年12月12日)に登場した。Xamarin.Macを使えば、使い慣れたC#でプログラムが書けるだけでなく、Monoや.NETで開発した資産をMac上のアプリでも再利用できる可能性があるのも魅力的だ。稿では、そのXamarin.Macを用いて「簡易Webブラウザ」のサンプル・アプリを開発することを通して、「Xamarin.Macの開発は、どのようなものか?」を紹介する(ただし、Mac App Storeへのアプリ公開の方法は紹介しない)。 【コラム】MonoとXamarin社 Monoとは、.NETの実行基盤の仕様である「CLI(共通言語インフラストラクチャ)」を、LinuxMac

    初めてのMac向けC#開発環境「Xamarin.Mac」
    rryu
    rryu 2014/07/01
    Interface Builderとの連携にはObjCのヘッダファイルが必要そうだが自分で書くのだろうか。
  • 技術的負債をなくすには - Qiita

    技術的負債をなくすには http://apps.wiki.fc2.com/wiki/%E6%8A%80%E8%A1%93%E7%9A%84%E8%B2%A0%E5%82%B5%E3%82%92%E3%81%AA%E3%81%8F%E3%81%99%E3%81%AB%E3%81%AF C# Objctive-cだけ使う VisualStudio Xcodeだけ使う VisualStudio Xcodeを機能をフル活用する WindowsServerを使う 一定のシェアを獲得したDBを使う デザパタを覚える コミュニケーションはOffice 365やredMine,イラレGit Svnを使う 社会的に技術的負債をなくすには 動的言語は使わない。 動的をすべて捨てる(人の手に渡るような捨て方はしない ちり紙交換がよい) 動的DBは使わない。リレーションのない動的DBは使わない(mongoDB

    技術的負債をなくすには - Qiita
    rryu
    rryu 2014/06/02
    MVCじゃないASP.NETは結構技術的負債になっていると思う……
  • Mapping Enum from String

    rryu
    rryu 2013/09/24
    O/R Designerがenumに変換できないというエラーを出したらenumの完全修飾名の頭に「global::」を付けたものを指定すると直る。
  • neue cc - C#の強み、或いは何故PHPから乗り換えるのか

    特にPHPディスりたいわけでは、あるのかないのかはともかく、やっぱり実際に使ってきて良いところというのも分からなくもない感じです。会場でも話したのは、短期的な開発速度には有利なのは間違いないのかな、と。デプロイとかも、とりあえずポン置きでいいし、開発も、なんかもう複雑なことやると面倒だし、どうせ文字列だらけになるしで、開き直ってハードコーディングでバカバカ作っていくから速い、とか。ただし勿論あとで苦労するわけですがそれはそれとして。けれどやっぱC#良いよね、って。 言語も色々なトレードオフで成り立つわけですが、その中でもC#は、バランス良くて好きだなーというのが私の個人的なところです。Visual Studio良いよねー、でもいいですしLINQ良いよねー、もいいですし、IntelliSenseがないと生きていけないですし。うん、そう、IntelliSense指向言語が好きなわけです。 ほと

    rryu
    rryu 2013/06/16
    C#は静的型付けの安心感と型推論と匿名型による型を意識しないでいい気軽さが混在するおもしろい言語だと思う。
  • Standard Query Operators Overview

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    Standard Query Operators Overview
    rryu
    rryu 2013/02/20
  • 第8回 LINQメソッド形式編(1/4) - @IT

    予約語のエスケープ まず軽いが重要な話題から入っていこう。 クエリ式によくあるワナとして、クエリ式の予約語と使用するキーワードが衝突するという問題がある。 例えば、これといって特にひねったコーディングは行っていない以下のリスト1を見ていただきたい。移動経路クラスのfromとtoはpublicなフィールドだから、FromとToにすべきだよな、といった感想は出るかもしれないが、それは名前付けルールの問題であって、コンパイルを通らないような問題ではない。 しかし、このコードはコンパイルできない。 using System; using System.Linq; class 移動経路 { public string from; public string to; } class Program { static void Main(string[] args) { 移動経路[] 移動経路データ =

    rryu
    rryu 2012/01/20
    LINQのクエリ式をメソッドチェーンに直す方法について。
  • Adding Custom Functions to XPath

    rryu
    rryu 2010/03/11
    .NETのSystem.XMLでホスト言語側で独自関数を定義する方法。
  • ラムダ式 - ラムダ式と匿名関数 - C#

    "ラムダ式" を使用して匿名関数を作成します。 ラムダ宣言演算子=>を使用して、ラムダのパラメーター リストを式体から分離します。 ラムダ式は、次の 2 つの形式のいずれかにすることができます。 式形式のラムダは、式体に式が含まれます。 (input-parameters) => expression ステートメント形式のラムダは、式体にステートメント ブロックが含まれます。 (input-parameters) => { <sequence-of-statements> } ラムダ式を作成するには、ラムダ演算子の左辺に入力パラメーターを指定し (ある場合)、右辺に式またはステートメント ブロックを指定します。 ラムダ式は、デリゲート型に変換できます。 ラムダ式を変換できるデリゲート型は、パラメータと戻り値の型で定義されます。 ラムダ式が値を返さない場合は Action デリゲート型

    rryu
    rryu 2010/03/07