C#のFuncについて
とりあえずテストコード
void Main() { Func<string,Action,Action,bool> func = (testName,action1,action2) => { action1(); Console.WriteLine(testName); action2(); return true; }; func("FuncTestCode:1", () => { Console.WriteLine("FuncTestCode:2"); }, () => { Console.WriteLine("FuncTestCode:3"); }); }
出力結果
FuncTestCode:2 FuncTestCode:1 FuncTestCode:3
要はメソッド内の処理をデリゲート(委譲)するもの。
匿名メソッドって言うらしい?
匿名メソッド、ラムダ式については以下のサイトでわかりやすくまとめてある
http://csharp30matome.seesaa.net/article/129993518.html
例えば以下の匿名メソッド(WriteLine1)とメソッド(WriteLine2)は同じものである(と考えてよい)。
void Main() { Func<string,bool> WriteLine1 = (text) => { Console.WriteLine(text); return true; }; } public bool WriteLine2(string text) { Console.WriteLine(text); return true; }
なので以下のような(意味のない)メソッドがあった場合
public bool ActionInvoke(Func<string,bool> action,string text) { Console.WriteLine("【ActionInvoke】text:{0}",text); if(action(text)) return true; else return false; }
どちらもActionの引数として渡せるのである
void Main() { Func<string,bool> WriteLine1 = (text) => { Console.WriteLine(text); return true; }; ActionInvoke(WriteLine1,"Test1"); ActionInvoke(WriteLine2,"Test2"); } public bool WriteLine2(string text) { Console.WriteLine(text); return true; } // Define other methods and classes here public bool ActionInvoke(Func<string,bool> action,string text) { Console.WriteLine("【ActionInvoke】text:{0}",text); if(action(text)) return true; else return false; }
出力結果
【ActionInvoke】text:Test1 Test1 【ActionInvoke】text:Test2 Test2
型がdefault値かnullならから文字列を返し、それ以外ならToString()で返すメソッド
Viewにデータを表示するときに意外と役立つ
※ユーザ定義型には使用できない。
/// nullかdefault値ならstring.Emptyを返す。それ以外ならToString()で返す。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static string ValueOrStringEmpty<T>(T source)
{
if (source != null && !source.Equals(default(T)))
return source.ToString();
return string.Empty;
}
クラスのプロパティ名を取得するメソッド
/// <summary>
/// クラスのプロパティ名を取得する
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="e"></param>
/// <returns></returns>
public static string GetName<T>(Expression<Func<T>> e)
{
var member = (MemberExpression)e.Body;
return member.Member.Name;
}
Visual Studio 2013 Express WebでFacebook連携
参考
http://tech.exceedone.co.jp/asp-net-mvc/asp-net-mvc4-login-facebook/
新しいプロジェクトから[ASP.NET Webアプリケーション]を選択し、
MVCを選択し、とりあえず作成。
https://developers.facebook.com/
登録したら上記ページからアプリ⇒新しいアプリを作成を選択。
DisplayNameとNamespaceとカテゴリの入力を求められる。
Namespaceはまだどのように使われるのかわからないので保留(入力しなくてもいい)
アプリケーションを作成したら、そのアプリケーションのページから
・アプリID
・アプリのシークレットキー
を取得することができる。
その二つの文字列を
VisualStudioの[プロジェクト名].AppStart.Startup.Auth.csに記述する。
//app.UseFacebookAuthentication(
// appId: "",
// appSecret: "");
初めは上記のようにコメントアウトされているので
コメントを外して、IDとシークレットキーを入力。
そのままアプリを起動し、ログイン画面へ遷移するとFacebookでログインボタンが表示され、認証を行うことができる。。。。が、まだFacebookは認証が終わった後、どこにリダイレクトすればよいのかを知らないので、それをFacebookのディベロッパーサイトから設定する必要がある。
再び
https://developers.facebook.com/にアクセスし、
左ナビの設定ボタンを選択する。
[+AddPlatform]と書かれたリンクがあるのでそれを選択し、さらにウェブサイトを選択。
そこの[サイトURL]がリダイレクト先になるので、
マイページ等のURLを入力すればいいかと。
これでリダイレクト先の設定ができた。
再度VisualStudioからプロジェクトを立ち上げてFacebook認証を行えばログイン⇒マイページへ遷移という流れを作れる。
Visual Studioを使ってAzureにデプロイ
Visual Studioをインストールしていない場合は
http://www.microsoft.com/ja-jp/download/details.aspx?id=40747
から無料版をダウンロードしてインストール
次に
https://www.windowsazure.com/ja-jp/downloads/?fb=ja-jp
からazureのSDKもダウンロードしてインストール
これで準備完了。
VisualStudioを立ち上げて、azureのサブスクリプションに関連付けられているMicrosoftアカウントでサインインを行う。
デプロイしたいプロジェクトを開いて、ソリューションエクスプローラーのプロジェクトファイルを右クリック⇒[発行]を選択
・発行プロファイルの選択またはインポート
の設定で[インポート]を選択。
Windows Azure Webサイトからのインポートを選択し、
ドロップダウンリストからデプロイしたいWebサイトを選択し[OK]を選択。
あとは[発行]を選択すればデプロイ完了。