https://www.itread01.com/content/1547829386.html
https://tpu.thinkpower.com.tw/tpu/articleDetails/322
2020年5月31日 星期日
2020年5月30日 星期六
再論委派 AnonymousMethod及 Predicate
static void AnonymousMethodsSample()
{
List<Gamer> listGamers = new List<Gamer>
{
new Gamer{ Id = 1, Name = "Name01"},
new Gamer{ Id = 2, Name = "Name02"},
new Gamer{ Id = 3, Name = "Name03"},
new Gamer{ Id = 4, Name = "Name04"}
};
Predicate<Gamer> predicateGetGamerId1 = new Predicate<Gamer>(GetGamerId1);
Gamer gamerId1 = listGamers.Find(g => predicateGetGamerId1(g));
Console.WriteLine($"predicateGetGamerId1 : gamerId1.Id=={gamerId1.Id}, gamerId1.Name=={gamerId1.Name}.");
//
Predicate<Gamer> predicateGetGamerId9= g => g.Id == 3;
Gamer gamerId9= listGamers.Find(predicateGetGamerId9);
Console.WriteLine($"predicateGetGamerId1 : gamerId1.Id=={gamerId9.Id}, gamerId1.Name=={gamerId9.Name}.");
// "new Predicate<Gamer> " can be omitted.
Predicate<Gamer> predicateGetGamerId2 = GetGamerId2;
Gamer gamerId2 = listGamers.Find(g => predicateGetGamerId2(g));
Console.WriteLine($"predicateGetGamerId2 : gamerId2.Id=={gamerId2.Id}, gamerId2.Name=={gamerId2.Name}.");
// Anonymous method is being passed as an argument to
// the Find() method. This anonymous method replaces
// the need for Step 1, 2 and 3
Gamer gamerId3 = listGamers.Find(delegate (Gamer g) { return g.Id == 3; });
Console.WriteLine($"predicateGetGamerId3 : gamerId3.Id=={gamerId3.Id}, gamerId3.Name=={gamerId3.Name}.");
//using lambda expression
//=> is called lambda operator and read as GOES TO
Gamer gamerId3V2 = listGamers.Find(g => g.Id == 3);
Console.WriteLine($"predicateGetgamerId3V2 : gamerId3V2.Id=={gamerId3V2.Id}, gamerId3V2.Name=={gamerId3V2.Name}.");
//using lambda expression
Gamer gamerId3V3 = listGamers.Find((Gamer g) => g.Id == 3);
Console.WriteLine($"predicateGetgamerId3V2 : gamerId3V3.Id=={gamerId3V3.Id}, gamerId3V3.Name=={gamerId3V3.Name}.");
}
// Step 1: Create a method whose signature matches Predicate<Gamer> delegate.
private static bool GetGamerId1(Gamer g)
{
return g.Id == 1;
}
private static bool GetGamerId2(Gamer g)
{
return g.Id == 2;
}
{
List<Gamer> listGamers = new List<Gamer>
{
new Gamer{ Id = 1, Name = "Name01"},
new Gamer{ Id = 2, Name = "Name02"},
new Gamer{ Id = 3, Name = "Name03"},
new Gamer{ Id = 4, Name = "Name04"}
};
Predicate<Gamer> predicateGetGamerId1 = new Predicate<Gamer>(GetGamerId1);
Gamer gamerId1 = listGamers.Find(g => predicateGetGamerId1(g));
Console.WriteLine($"predicateGetGamerId1 : gamerId1.Id=={gamerId1.Id}, gamerId1.Name=={gamerId1.Name}.");
//
Predicate<Gamer> predicateGetGamerId9= g => g.Id == 3;
Gamer gamerId9= listGamers.Find(predicateGetGamerId9);
Console.WriteLine($"predicateGetGamerId1 : gamerId1.Id=={gamerId9.Id}, gamerId1.Name=={gamerId9.Name}.");
// "new Predicate<Gamer> " can be omitted.
Predicate<Gamer> predicateGetGamerId2 = GetGamerId2;
Gamer gamerId2 = listGamers.Find(g => predicateGetGamerId2(g));
Console.WriteLine($"predicateGetGamerId2 : gamerId2.Id=={gamerId2.Id}, gamerId2.Name=={gamerId2.Name}.");
// Anonymous method is being passed as an argument to
// the Find() method. This anonymous method replaces
// the need for Step 1, 2 and 3
Gamer gamerId3 = listGamers.Find(delegate (Gamer g) { return g.Id == 3; });
Console.WriteLine($"predicateGetGamerId3 : gamerId3.Id=={gamerId3.Id}, gamerId3.Name=={gamerId3.Name}.");
//using lambda expression
//=> is called lambda operator and read as GOES TO
Gamer gamerId3V2 = listGamers.Find(g => g.Id == 3);
Console.WriteLine($"predicateGetgamerId3V2 : gamerId3V2.Id=={gamerId3V2.Id}, gamerId3V2.Name=={gamerId3V2.Name}.");
//using lambda expression
Gamer gamerId3V3 = listGamers.Find((Gamer g) => g.Id == 3);
Console.WriteLine($"predicateGetgamerId3V2 : gamerId3V3.Id=={gamerId3V3.Id}, gamerId3V3.Name=={gamerId3V3.Name}.");
}
// Step 1: Create a method whose signature matches Predicate<Gamer> delegate.
private static bool GetGamerId1(Gamer g)
{
return g.Id == 1;
}
private static bool GetGamerId2(Gamer g)
{
return g.Id == 2;
}
2020年5月29日 星期五
ref,out及多執行緒
ref重點
1.傳遞至 ref 參數的引數,在傳遞之前必須先初始化。
2.不能將ref和out用於async修飾詞定義的非同步方法。
3.有進有出
out關鍵字
基本上跟ref一樣
想要多個回傳值的時候,可以使用out
ref跟out在使用上有很微小的差距
使用out的話,他不需要在被調用前初始化
但是調用者需要在返回之前指定輸出的參數
另一方面,可以用這樣去想
out類似於將方法附加返回值,也就是回傳多個值啦
多thread共用變數時,可以用內建的 Interlocked.Increment、Interlocked.Decrement
來Lock變數
static void SumTo10000V3()
{
for (int i = 1; i <= 10000; i++)
{
Interlocked.Increment(ref Total3);
}
}
static void SumTo10000V4()
{
for (int i = 1; i <= 10000; i++)
{
lock (_lockV4)
{
Total4++;
}
}
}
public static void SumTo10000V5()
{
for (int i = 1; i <= 10000; i++)
{
// Acquires the exclusive lock
Monitor.Enter(_lockV5);
try
{
Total5++;
}
finally
{
// Releases the exclusive lock
Monitor.Exit(_lockV5);
}
}
}
static int Total6 = 0;
static object _lockV6 = new object();
public static void SumTo10000V6()
{
for (int i = 1; i <= 10000; i++)
{
bool lockTaken = false;
//1.
//Monitor.Enter(Object obj, Boolean lockTaken)
//1.1.
//Acquires an exclusive lock on the specified object,
//and atomically sets a value that
//indicates whether the lock was taken.
//1.2.
//Boolean lockTaken
//The result of the attempt to acquire the lock, passed by reference.
//The input must be false.
//The output is true if the lock is acquired
Monitor.Enter(_lockV6, ref lockTaken);
try
{
Total6++;
}
finally
{
// Releases the exclusive lock
if (lockTaken)
Monitor.Exit(_lockV6);
}
}
}
1.傳遞至 ref 參數的引數,在傳遞之前必須先初始化。
2.不能將ref和out用於async修飾詞定義的非同步方法。
3.有進有出
out關鍵字
基本上跟ref一樣
想要多個回傳值的時候,可以使用out
ref跟out在使用上有很微小的差距
使用out的話,他不需要在被調用前初始化
但是調用者需要在返回之前指定輸出的參數
另一方面,可以用這樣去想
out類似於將方法附加返回值,也就是回傳多個值啦
多thread共用變數時,可以用內建的 Interlocked.Increment、Interlocked.Decrement
來Lock變數
static void SumTo10000V3()
{
for (int i = 1; i <= 10000; i++)
{
Interlocked.Increment(ref Total3);
}
}
static void SumTo10000V4()
{
for (int i = 1; i <= 10000; i++)
{
lock (_lockV4)
{
Total4++;
}
}
}
public static void SumTo10000V5()
{
for (int i = 1; i <= 10000; i++)
{
// Acquires the exclusive lock
Monitor.Enter(_lockV5);
try
{
Total5++;
}
finally
{
// Releases the exclusive lock
Monitor.Exit(_lockV5);
}
}
}
static int Total6 = 0;
static object _lockV6 = new object();
public static void SumTo10000V6()
{
for (int i = 1; i <= 10000; i++)
{
bool lockTaken = false;
//1.
//Monitor.Enter(Object obj, Boolean lockTaken)
//1.1.
//Acquires an exclusive lock on the specified object,
//and atomically sets a value that
//indicates whether the lock was taken.
//1.2.
//Boolean lockTaken
//The result of the attempt to acquire the lock, passed by reference.
//The input must be false.
//The output is true if the lock is acquired
Monitor.Enter(_lockV6, ref lockTaken);
try
{
Total6++;
}
finally
{
// Releases the exclusive lock
if (lockTaken)
Monitor.Exit(_lockV6);
}
}
}
2020年5月27日 星期三
2020年5月26日 星期二
2020年5月24日 星期日
開啟舊vs2010 無效的授權資料。請重新安裝 問題
另外建一個 取名為SecurityFile - 2019 方案
修改紅字的部份
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2015
修改紅字的部份
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2015
2020年5月23日 星期六
2020年5月20日 星期三
2020年5月18日 星期一
2020年5月17日 星期日
2020年5月16日 星期六
2020年5月15日 星期五
2020年5月14日 星期四
2020年5月13日 星期三
Repeater說明
Repeater說明
https://www.bilibili.com/video/BV144411e7Vm?from=search&seid=15582148981500298709
[ASP.NET2.0]Repeater C# 分页用法
https://blog.csdn.net/dengxingbo/article/details/4766011
https://www.bilibili.com/video/BV144411e7Vm?from=search&seid=15582148981500298709
[ASP.NET2.0]Repeater C# 分页用法
https://blog.csdn.net/dengxingbo/article/details/4766011
2020年5月12日 星期二
2020年5月11日 星期一
網頁線上編輯器
DevExpress Html Editing
https://demos.devexpress.com/ASPxHtmlEditorDemos/Features/General.aspx
https://www.youtube.com/watch?v=C7V-goJKiMU
FreeTextBox HTML Editor
http://www.freetextbox.com/
https://demos.devexpress.com/ASPxHtmlEditorDemos/Features/General.aspx
https://www.youtube.com/watch?v=C7V-goJKiMU
FreeTextBox HTML Editor
http://www.freetextbox.com/
tor
2020年5月10日 星期日
Javascript URLEncode escape , encodeURI , encodeURIComponent 的差異
jquery click事件傳參Script
https://www.itread01.com/p/1023830.html
語法
jQueryObject.click( [ [ data ,] handler ] )
如果指定了至少一個引數,則表示繫結click事件的處理函式;沒有指定任何引數,則表示觸發click事件。
引數
引數 描述
data 可選/任意型別觸發事件時,需要通過event.data傳遞給事件處理函式的任意資料。
handler 可選/Function型別指定的事件處理函式。
jQuery 1.4.3 新增支援:click()支援data引數。
語法
jQueryObject.click( [ [ data ,] handler ] )
如果指定了至少一個引數,則表示繫結click事件的處理函式;沒有指定任何引數,則表示觸發click事件。
引數
引數 描述
data 可選/任意型別觸發事件時,需要通過event.data傳遞給事件處理函式的任意資料。
handler 可選/Function型別指定的事件處理函式。
jQuery 1.4.3 新增支援:click()支援data引數。
2020年5月7日 星期四
ASP.NET利用String.Join以分隔符號來串連集合資料
https://dotblogs.com.tw/puma/2008/08/26/5200
namespace stringJoin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] empnames =
{"龍龍一",
"龍龍二",
"龍龍三",
"龍龍四",
"龍龍五",
"龍龍六",
};
List<string> TestWord = new List<string>() { " powerpnt.exe"," sketchup.exe"," Winword.exe"};
//https://dotblogs.com.tw/puma/2008/08/26/5200
private void button1_Click(object sender, EventArgs e)
{
List<string> Tword = new List<string>();
foreach (var item in TestWord)
{
var str = item.ToString().ToLower();
Tword.Add(str);
}
//label1.Text = string.Join(" , ", empnames.ToString().ToLower());
label1.Text = string.Join(" , ", Tword.ToArray());
}
}
}
namespace stringJoin
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string[] empnames =
{"龍龍一",
"龍龍二",
"龍龍三",
"龍龍四",
"龍龍五",
"龍龍六",
};
List<string> TestWord = new List<string>() { " powerpnt.exe"," sketchup.exe"," Winword.exe"};
//https://dotblogs.com.tw/puma/2008/08/26/5200
private void button1_Click(object sender, EventArgs e)
{
List<string> Tword = new List<string>();
foreach (var item in TestWord)
{
var str = item.ToString().ToLower();
Tword.Add(str);
}
//label1.Text = string.Join(" , ", empnames.ToString().ToLower());
label1.Text = string.Join(" , ", Tword.ToArray());
}
}
}
2020年5月6日 星期三
十个最好用的所见即所得HTML编辑器
https://www.hotbak.net/key/%E5%8D%81%E4%B8%AA%E6%9C%80%E5%A5%BD%E7%94%A8%E7%9A%84%E6%89%80%E8%A7%81%E5%8D%B3%E6%89%80%E5%BE%97HTML%E7%BC%96%E8%BE%91%E5%99%A8weixin34367845%E7%9A%84%E5%8D%9A%E5%AE%A2CSDN%E5%8D%9A%E5%AE%A2.html
asp.net FreeTextBox配置詳解
http://www.aspphp.online/bianchen/dnet/aspnet/aspnetjc/201701/55211.html
Freetextbox 使用說明詳解
https://www.twblogs.net/a/5b7e83112b7177683857c02b
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/264872/
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/225183/
影片
https://www.youtube.com/watch?v=UKkP5ea4yVs
asp.net FreeTextBox配置詳解
http://www.aspphp.online/bianchen/dnet/aspnet/aspnetjc/201701/55211.html
Freetextbox 使用說明詳解
https://www.twblogs.net/a/5b7e83112b7177683857c02b
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/264872/
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/225183/
影片
https://www.youtube.com/watch?v=UKkP5ea4yVs
CSS] 圖片在div內水平置中
<!-- 圖片在div內置中 -->
<img src="圖片網址" style="display:block; margin:auto;"/>
<img src="圖片網址" style="display:block; margin:auto;"/>
<img src="圖片網址" style="float:left;"/> (圖片置左)
<img src="圖片網址" style="float:right;"/> (圖片置右)
<img src="圖片網址" style="float:right;"/> (圖片置右)
2020年5月3日 星期日
2020年5月1日 星期五
C# ASP.NET上传文件服务器及断点续传上传实例
http://www.codesc.net/source/11266.shtml
浅谈http断点续传的原理以及.NET代码实现,看似挺高端,其实很简单
https://ldqk.org/1416
文件斷點續傳功能的原理
https://kknews.cc/zh-tw/code/ez2r2pq.html
浅谈http断点续传的原理以及.NET代码实现,看似挺高端,其实很简单
https://ldqk.org/1416
文件斷點續傳功能的原理
https://kknews.cc/zh-tw/code/ez2r2pq.html
訂閱:
文章 (Atom)
WPF聊天室应用(ASP.NET Core SignalR)
WPF聊天室应用(ASP.NET Core SignalR) https://www.bilibili.com/video/BV1Q741187Si?p=2 https://www.bilibili.com/video/BV1UV411e75T?from=search&...
-
介面,依賴反轉,單元測試 https://www.youtube.com/watch?v=GpYieGx4y6M 介面隔離,反射,特性,依賴注入 https://www.youtube.com/watch?v=3bZ4rNS_o10
-
https://mgleon08.github.io/blog/2018/07/16/jwt/ https://medium.com/%E9%BA%A5%E5%85%8B%E7%9A%84%E5%8D%8A%E8%B7%AF%E5%87%BA%E5%AE%B6%E7%AD%86%...
-
https://dotblogs.com.tw/v6610688/2015/02/19/iis_office_access_word_excel_com_interop_api_configuration https://dotblogs.com.tw/gelis/archi...