开贴 重新学习C#
本帖最后由 李维强-15级 于 2019-6-18 22:11 编辑虽然用C#也码了上万行代码了 但是,我都是模仿人家的代码,不懂的其中的意思,现在稍微闲暇下来了,特地开贴,记录C#学习
本贴只适用于自己在学习过程中 不懂的地方的记录 学习资料来自各个地方,书上网络,什么都有
1楼贴出目录
C# 6.0本质论
4.2.3 表达式主体方法
foreach的用法
数组用法
list排序
dateTime转换成UNIX时间戳
List 泛型 集合中 Find 的用法
C# Lambda表达式
匿名类介绍
线程相关
String字符串提取
协变和逆变
string用法合集
视频教程
http://www.imooc.com/learn/806 foreach 的用法
遍历数组:foreach(type objName in collection/Array)
这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的type是你所要读取的数组对象将要存储在objName变量的数据类型,而objName是定义了一个type类型的变量名,代表每一次从集合和数组(collection/Array)中取得的元素,collection/Array则是所要存取的数组对象。用这种方法只需写一个foreach就可以遍历出除交错数组以外的所有维数的数组
int[,,] a = new int { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a
foreach(int i in a)
{
Console .WriteLine (i);
}
这两种代码执行的结果是一样的都是 每行一个元素,共8行,元素分别是1 2 3 4 5 6 7 8
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//声明数组. 第一种方法. 声明并分配元素大小.
int[] Myint = new int;
Myint = 30;
Myint = 50;
// 以此类推, 起始下标为0
//-------------------------------
// 声明数组,第二种方法, 声明并直接赋值,没有指定元素大小.
int[] Myint1 = { 20,10,50,65,18,90};
//------------------------------------------
//声明数组,第三种方法, 声明并分配大小,且赋值.
int[] i = new int { 10, 20, 30, 40, 50 };
// -----------------------------------------------
// foreach循环遍历数组..
int[] Sum = new int;
Random rd = new Random();
// 先用for循环给数组取随机数.
for (int s = 0; s <= Sum.Length - 1; s++)// Sum.Length是数组的一个属性,Length代表数组的长度
{
Sum = rd.Next(100);
}
// 遍历数组输出
foreach (int t in Sum)
{
Console.WriteLine(t);
}
}
}
}
本帖最后由 李维强-15级 于 2016-6-5 01:08 编辑
一维数组初始化的几个方法
string[] stringArray = new string; //第1种
int[] array1 = new int { 1, 3, 5, 7, 9 }; //第2种
string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };//第3种
int[] array3;
array3 = new int[] { 1, 3, 5, 7, 9 }; //第4种
int[] array4={1,2,3,4,5}; //第5种
二维数组 初始化类似只不过要用大括号包起来
int[,] a=new int;
int[,] a=new int{{1,2,3},{11,22,33}};
int[,] a=new int[,]{{1,2,3},{11,22,33}};
int[,] a={{1,2,3},{11,22,33}};
还有个交错数组 用到了再说
Array类常用方法
//CreateInstance方法
int[] arrayDim = { 2, 3 }; //这里定义数组维数
Array a=Array.CreateInstance(typeof(int),5) ; //这种就是1维 5个元素的
Array a=Array.CreateInstance(typeof(int),arrayDim) ; //这种就是2维数组2*3的矩阵
//以上 索引下限(维度下限) 都是默认为0
对于每个数组 都有个Length 表示 所有元素的长度32位,还有个LongLength也表示所有元素的长度64位
然后有个Array.GetLength(int index);里面这个index就是几维数组 对应维度的索引返回的是那个维度的元素个数
例如:
int[,,] a=new int;
那么a.GetLength(0)==3;a.GetLength(1)==4;a.GetLength(2)==5;
数组的复制 可以用For循环 每个挨着赋值,也可以用Array.Copy()方法 ,也可以用CopyTo()方法,和Clone()方法。这些方法用到了去搜索下 有例子
当然还有SetValue() 和GetValue()来赋值和取值
查询数组方法和属性查看SysTem.Array方法和属性
用泛型 实现多维数组 这个具体没试验过。
List<List<int>> array1 = new List<List<int>>();
List<int> array2 = new List<int>();
array2.Add(2);
array2.Add(3);
List<int> array3 = new List<int>();
array3.Add(1);
//array3.Add(4);
array1.Add(array2);
array1.Add(array3);
list排序1 3 方法排就行了
http://blog.csdn.net/think_soft/article/details/3446393 dateTime转换成unix时间戳
((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString(); 本帖最后由 李维强-15级 于 2016-11-6 15:46 编辑
以前在开发中为了对List,String[].Array进行元素的查找一般都是这样做:
List lists = new List();
list.add("111");
.....
for(int i=0;i{
if(list.equals("要查找的元素"))
{....}
}
其实在C# 2.0对List,Array元素的查找,MS已经提供了一些泛型方法,让Coding人员更好的查找,遍历,等等...
以下是我简单对List的一些操作所写的Demo.供大家参考,以及和大家进行交流。
static void Main(string[] args)
{
//Prdicate用法
//第一种用法:[不创建显式的委托,也不创建指定泛型方法的类型参数]
ListOneMethod();
//Prdicate用法
//第二种用法:[创建显式的委托,也创建指定泛型方法的类型参数]
ListTwoMethod();
//第三种用法:[同于第二种方法,但用了两个类进行区分]
ListThreeMethod();
}
#region 第一种用法
private static void ListOneMethod()
{
String[] strs = { "WPF", "WCF", "WF", "Author", "WinFx", "Linq" };
String Name = Array.Find(strs, FindWhere);
Console.WriteLine("Result: ----------" + Name + "----------");
}
public static Boolean FindWhere(String str)
{
return str.Equals("Author") ? true : false;
}
#endregion
#region 第二种用法
private static void ListTwoMethod()
{
List<String> strlist = new List<String>();
strlist.Add("WPF");
strlist.Add("WCF");
strlist.Add("WF");
strlist.Add("Author");
strlist.Add("WinFx");
strlist.Add("Linq");
Predicate<String> FindValues = delegate(String list)
{
return list.Equals("WinFx") ? true : false;
};
Console.WriteLine("Result: ---FindIndex---" + strlist.FindIndex(FindValues) + "----------");
Console.WriteLine("Result: ---Exists----" + strlist.Exists(FindValues) + "----------");
List<String> lists = strlist.FindAll(FindValues);
foreach (string str in lists)
{
Console.WriteLine("Result: ---FindAll-----" + str + "----------");
}
Console.WriteLine("Result: ---FindLast----" + strlist.FindLast(FindValues) + "----------");
Console.WriteLine("Result: ---FindLastIndex--" + strlist.FindLastIndex(FindValues) + "----------");
Console.WriteLine("Result: ---RemoveAll--" + strlist.RemoveAll(FindValues) + "----------");
Console.WriteLine("Result: ---TrueForAll-" + strlist.TrueForAll(FindValues) + "----------");
}
#endregion
#region 第三种用法
private static void ListThreeMethod()
{
ListClass lists = new ListClass();
// 使用List.Add()方法來新增集合內容
lists.Values.Add(new ValueClass("WPF"));
lists.Values.Add(new ValueClass("WCF"));
lists.Values.Add(new ValueClass("WF"));
lists.Values.Add(new ValueClass("Author"));
lists.Values.Add(new ValueClass("WinFx"));
lists.Values.Add(new ValueClass("Linq"));
Predicate<ValueClass> FindValue = delegate(ValueClass obj) { return obj.Value == "Author"; };
Console.WriteLine("Result: ----------" + lists.Values.FindIndex(FindValue) + "----------");
Console.WriteLine("將所有資料列出");
int idx = 0;
Action<ValueClass> ListAll = delegate(ValueClass obj)
{
Console.WriteLine(string.Format("第 {0} 個的Value值為 {1}", idx, obj.Value));
idx++;
};
lists.Values.ForEach(ListAll);
}
public class ValueClass
{
private string _value = string.Empty;
public string Value
{
get { return _value; }
}
public ValueClass(string value)
{
_value = value;
}
}
public class ListClass
{
private List<ValueClass> _values = new List<ValueClass>();
public List<ValueClass> Values
{
get { return _values; }
}
public ListClass() { }
}
#endregion
*Predicate 是对方法的委托,如果传递给它的对象与委托中定义的条件匹配,则该方法返回 true。当前 List 的元素被逐个传递给 Predicate 委托,在找到匹配项时停止处理。此方法执行线性搜索;
还有就是有关于List其他的一些查找方法:
1.当需要依条件来寻找集合内的某个类别时, 可用List<T>Find(), List<T>FindLast()来搜寻, 回传搜寻到的类别
2.当需要依条件来寻找集合内的某些类别时, 可用List<T>FindAll()来搜寻, 将回传一个新的List<T>对象集合
3.当需要依条件来寻找集合内的某个类别的索引值时, 可用List<T>FindIndex(), List<T>FindLastIndex()
4.List<T>Find(), List<T>FindLast()的不同是, List<T>Find()由Index=0开始寻找, 而List<T>FindLast()由Index = List<T>.Count - 1开始寻找
同理, List<T>FindIndex(), List<T>FindLastIndex()也是一样, 不同的是, 这两个回传的是索引值
5.当使用List<T>Find()相关函示时, 必须delegate.这个Predicate<T>
其内容就是搜寻的判断式, 如:
Predicate<class1> FindJaofeng = delegate(class1 obj) {
return obj.Value == "Jaofeng";
};
return type为boolean值
而上面也有介绍一个List<T>.ForEach(), 这个Method只是将原本我们用foreach()的方式, 简化而已
譬如原本的习惯写法:
foreach (class1 cls in myText.Values) {
//Do something
}
// 现在变成
Action<class1> ActionName = delegate(class1 obj) {
//Do something
};
myText.Values.ForEach(ActionName);
查找DropDownList中的Item的
ListItemCollection items = DisplayModeDropdown.Items;
查找 Index:
int selectedIndex = items.IndexOf(items.FindByText("需要查找匹配的item"));
查找 Value:
string selectedValue = items.FindByText("需要查找匹配的item");
C# Lambda表达式
http://www.cnblogs.com/kingmoon/archive/2011/05/03/2035696.html C#3.0新特性 匿名类
http://www.cnblogs.com/joey0210/archive/2012/10/25/2739017.html 线程相关:
在睡眠的线程如何及时唤醒并退出!http://www.cnblogs.com/theLife/p/6569279.html
页:
[1]
2