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/

からFacebookディベロッパーとして登録する。

 

登録したら上記ページからアプリ⇒新しいアプリを作成を選択。

 

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]を選択。

 

あとは[発行]を選択すればデプロイ完了。