´Ó2.0ÆðÎÒÃÇÒ»Ö±¾ÍÔÚ̸ÂÛ·ºÐÍ£¬ÄÇôʲôÊÇ·ºÐÍ£¬·ºÐÍÓÐʲôºÃ´¦£¬Óë·ºÐÍÏà¹ØµÄ¸ÅÄîÓÖ¸ÃÔõôʹÓ㬱ÈÈç·ºÐÍ·½·¨£¬·ºÐÍίÍС£ÕâһƪÎÒ»áÈ«ÃæµÄ½éÉÜ·ºÐÍ¡£
ÄÇôÊ×ÏÈÎÒÃDZØÐë¸ãÇå³þʲôÊÇ·ºÐÍ£¬·ºÐÍÆäʵҲÊÇÒ»ÖÖÀàÐÍ£¬¸úÎÒÃÇʹÓõÄint,stringÒ»Ñù¶¼ÊÇ.netµÄÀàÐÍ¡£·ºÐÍÆäʵ¾ÍÊÇÒ»¸öÄ£°åÀàÐÍ£¬ÍòÄÜÀàÐÍ¡£ËüÔÊÐíÎÒÃÇÔÚÉè¼ÆÀàµÄʱºòʹÓÃÒ»¸öÀàÐͿհס£Ô¤ÁôÒ»¸öÀàÐÍ¡£µÈµ½ÎÒÃÇʹÓÃÕâ¸öÀàµÄʱºò£¬ÎÒÃÇ¿ÉÒÔʹÓÃÌØ¶¨µÄÀàÐÍÀ´Ìæ»»µôÎÒÃÇÔ¤ÁôµÄÕâ¸öÀàÐÍ¡£Õâ¾ÍÊÇ·ºÐÍ¡£
ÄÇôÕâÑùʹÓõĺô¦ÓÐÊ²Ã´ÄØ£¿
1£¬ÀàÐͰ²È«ÐÔ
2£¬ÐÔÄÜÌá¸ß
3£¬´úÂëÖØÓÃ
4£¬À©Õ¹ÐÔ
Ϊʲô»áÓÐÕ⼸¸öºÃ´¦£¬ÎÒÃÇÀ´½âÎöһϡ£
ÔÚÎÒÃÇÌÖÂÛ·ºÐ͵ÄÓŵãµÄʱºò£¬ÏÈÀ´¿´¿´ÔõôʹÓ÷ºÐÍ£¬·ºÐÍÒ»°ãÓ뼯ºÏÒ»ÆðʹÓᣵ«ÊÇÎÒÃÇÒ²¿ÉÒÔ´´Ôì×Ô¼ºµÄ·ºÐÍÀà¡£ÕâÀïÎÒÃǶ¨ÒåÒ»¸öÀàPerson¡£Õâ¸öÀàÓÐ3¸ö±äÁ¿£¬ID,FirstName,LastName.FirstNameºÍLastNameµÄÀàÐͺÜÈ·¶¨¾ÍÊÇstring¡£¶øIDµÄÀàÐÍÎÒÃÇÈ´²»È·¶¨£¬ÕâÀïµÄ²»È·¶¨ÊÇΪÁ˸üºÃµÄÀ©Õ¹ÐÔ£¬¶ø²»ÊÇ˵²»ÄÜÈ·¶¨£¬±ÈÈçID¿ÉÒÔÊÇ´¿intµÄ¸ñʽ£¬±ÈÈç1,2.ͬʱҲ¿ÉÒÔÊÇstringµÄET001£¬ET002.µ±È»ÎÒÃÇ¿ÉÒÔͨ¹ýÆ´½Ó×Ö·û´®À´Íê³ÉÕâ¸öµÄ²Ù×÷£¬µ«ÊÇÈç¹ûÎÒÃÇʹÓ÷ºÐÍ£¬¾ÍÄÜʵÏֺܺõÄÀ©Õ¹ÐÔ£¬ÐÔÄÜ£¬°²È«ÐÔ¡£ÀàÈçÏÂÈçÏ¡£
public class Person<T>
{
private T _t;
public T T1
{
get { return _t; }
set { _t = value; }
}
private string _firstName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public Person() { }
public Person(T t1, string firstName, string
lastName)
{
this._t = t1;
this._firstName = firstName;
this._lastName = lastName;
}
}
|
·ºÐÍÀàµÄ¶¨ÒåÊǺܼòµ¥µÄ<T>£¬ÕâÑù¾Í¿ÉÒÔ¶¨Òå·ºÐÍÀ࣬ÕâÀïÎÒÃÇʹÓÃÁË·ºÐÍT£¬Ô¤ÁôÁËÒ»¸öÀàÐÍ¡£·ºÐÍËùÄÜÀí½âµÄ²Ù×÷ÊÇ£º1ÕâÀïÊÇÒ»¸öÀàÐÍ£¬2Õâ¸öÉè¼ÆÊ±Î´Öª£¬3ÎÒÃÇ¿ÉÒÔÔÚÒÔºóÖ¸¶¨Êµ¼ÊÀàÐÍÀ´Ìæ»»Õâ¸öÀàÐÍ¡£ÆäʵÓеãÏñίÍС£Ö»²»¹ýίÍÐÔ¤ÁôµÄÊÇÒ»¸ö¾ßÓÐÌØ¶¨Ç©ÃûµÄ·½·¨³éÏó¡£¶ø·ºÐÍÔ¤ÁôµÄÊÇÒ»¸öÀàÐÍ¡£Õâ¾Í×ãÒÔ˵Ã÷ÃæÏò¶ÔÏóÆäʵ´ÓijÖֽǶÈÀ´Ëµ¾ÍÊÇÃæÏò³éÏó¶ø²»ÊÇÃæÏò¾ßÌåµÄʵÏÖ¡£
ÕâÀïÎÒÃǶ¨ÒåµÄ·ºÐÍÀàÐÍT£¬¾Í¿ÉÒÔÔÚºóÐøÊ¹ÓÃʱʹÓò»Í¬µÄÀàÐÍÀ´Ìæ»»¡£ÕâÀï¾Í¿ÉÒÔ×öµ½ÎÒÃÇÇ°ÃæÌáµ½µÄʹÓÃint£¬»òÕßstring£¬»òÕ߯äËûµÄÈκÎÎÒÃÇÏëÒªµÄÀàÐÍ£¬ÉõÖÁÊÇÎÒÃÇ×Ô¼º¶¨ÒåµÄÀàÐÍ¡£ÎÒÃÇÀ´¿´¿´µ÷ÓôúÂë¡£
Person<int> person = new Person<int>(1,
"Edrick",
"Liu");
Person<string> personString = new Person
<string>("ET001",
"Edrick", "Liu");
Console.WriteLine("INT:ID:{0},FirstName:{1},
LastName:{2}",person.T1,person.FirstName,
person.LastName);
Console.WriteLine("STRING:ID:{0},FirstName:
{1},LastName:{2}",personString.T1,personString.
FirstName,personString.LastName); |
ÕâÀïÎÒÃDz»ÐèҪƴ½Ó×Ö·û´®£¬²»ÐèÒª×öÈκζîÍâµÄ²Ù×÷¾Í¿ÉÒÔʵÏÖ¡£
ÕâÀïÎÒÃÇ˵Ã÷ÁË´úÂëÖØÓÃÐÔ¡£
ÎÒÃÇ¿ÉÒÔÀ©Õ¹ÀàÐÍT£¬ÔÚÈκÎʱºò£¬Èç¹ûÐèÇó·¢ÉúÁ˱仯£¬ÓÖÒªÒÔ²»Í¬µÄ¸ñʽÀ´Êä³öID¡£ÎÒÃÇÉõÖÁ¿ÉÒÔÀ©Õ¹Ò»¸öIDÀࡣȻºóÓÃIDÀàÀ´Ìæ»»T¡£
public class MyID
{
private string _city;
public string City
{
get { return _city; }
set { _city = value; }
}
private string _school;
public string School
{
get { return _school; }
set { _school = value; }
}
private string _className;
public string ClassName
{
get { return _className; }
set { _className = value; }
}
private string _number;
public string Number
{
get { return _number; }
set { _number = value; }
}
public MyID() { }
public MyID(string city, string school,
string className,
string number)
{
this._city = city;
this._school = school;
this._className = className;
this._number = number;
}
} |
ÎÒÃÇÀ©Õ¹ÁËÒ»¸öIDÀ࣬ÓÃÕâ¸ö¸´ÔÓÀàÐÍÀ´ÓÃ×÷ÎÒÃǵÄID¡£ÕâÀïÎÒÃDz»ÐèÒª¸ü¸ÄPersonÀà¾Í¿ÉÒÔÖ±½ÓÀ©Õ¹IDÁË¡£ÒòΪTÊÇ¿ÉÒÔʹÓÃÈκÎÀàÐÍÀ´Ìæ»»µÄ¡£
MyID myId =new MyID("WuHan", "SanZhong",
"YiBan", "0001");
Person<MyID> personID = new Person<MyID>(myId,
"Edrick", "Liu");
Console.WriteLine("ID:{0},FirstName:{1},LastName:{2}",myId.City+
"-"+myId.School+"-"+myId.ClassName+"-"+myId.Number,personID.
FirstName,personID.LastName); |
ÕâÑù¾ÍÀ©Õ¹ÁËPersonÀà¡£µ±È»ÎÒÃǵÄMyIDÀïÃæÒ²¿ÉÒÔʹÓ÷ºÐÍ£¬ÕâÀïΪÁËÀý×ӵļòµ¥ÐÔ£¬ÎÒÃǾÍʹÓÃÒ»´ÎÐÔÀ©Õ¹¡£
ÕâÀï˵Ã÷ÁËÀ©Õ¹ÐÔ
µ±È»ÓÐÈË»á˵£¬ÄãÕâÀï·ºÐÍ¿ÉÒÔ×öµ½µÄ£¬ÎÒÃÇÓÃobjectҲͬÑù¿ÉÒÔ×öµ½£¬Êǵģ¬ÕâÀï·ºÐÍ¿ÉÒÔ×öµ½µÄ£¬objectҲͬÑù¿ÉÒÔ×öµ½¡£µ«ÊÇÎÒÃÇÀ´¿´ÏÂÒ»¸öʵÀý¡£ÕâÀïÎÒÃÇʹÓÃArrayListÀ´×öÕâ¸öʾÀý¡£
ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
IEnumerator ie = list.GetEnumerator();
while (ie.MoveNext())
{
int i = (int)ie.Current;
Console.WriteLine(i);
}
|
ºÜ¼òµ¥µÄÒ»¸öʾÀý¡£Ê¾Àý»°Ò»¸öArrayList£¬È»ºóÌí¼Ó3¸öÊý×Ö¡£È»ºóö¾Ù¡£ÕâÀïÎÒΪʲôҪʹÓÃö¾Ù¶ø²»Ö±½ÓforeachÄØ£¬ÕâÑùÎÒÃǸüÄÜÖ±½Ó¿´Çå³þʹÓÃobjectµÄʱºòÀàÐÍÖ®¼äµÄת»»¡£Èç¹û²»Çå³þforeachΪʲô¿ÉÒÔÒÔÕâÑùµÄ´úÂëÌæ»»µÄ£¬¿ÉÒԲο¼Îҵĵü´úÆ÷Ò»ÎÄ¡£
ÎÒÃÇÀ´¿´Ò»·ùͼ¡£

Õâ¾ÍÊÇÎÒÃÇÍù¼¯ºÏÀïÃæÌí¼ÓÔªËØÊ±ºòµÄÌáʾ£¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÀàÐÍÊÇobject¡£Èç¹ûÎÒÃÇÍùÀïÃæ¼ÓÈëintÐÍÔªËØ£¬ÄÇÃ´ÔªËØ×ÔÈ»»á±»×°Ïä¡£ÄÇôÔÚÎÒÃǵü´úµÄʱºòÄØ£¿ÉÏÃæµÄ´úÂëÏÔʾÁËÓÐÒ»¸öÇ¿ÖÆ×ª»»£¬¾ÍÊDzðÏäÁË¡£ËùÒÔÕâÀï½øÐÐÁËÒ»´Î×°ÏäºÍ²ðÏä¡£×°ÏäºÍ²ðÏäÊÇ»áÓÐÐÔÄÜËðʧµÄ£¬Ô°×ÓÀïÒ²ÓÐÅóÓÑ×ö¹ý²âÊÔ¡£http://archive.cnblogs.com/a/2213803/¾Í×öÁËÒ»¸ö²âÊÔ£¬´ó¼Ò¿ÉÒÔ¿´¿´¡£ÕâÀïÎÒÃÇÐèÒªÖªµÀµÄ¾ÍÊÇʹÓü¯ºÏʵ¼ÊÉÏÊÇ·¢ÉúÁË×°ÏäºÍ²ðÏä¡£ÄÇô»¹ÓÐÒ»¸öÎÊÌâÒ²¾Í³öÀ´ÁË£¬¼ÈÈ»ÕâÀïÎÒÃÇ¿ÉÒÔʹÓÃint£¬µ±È»Ò²¿ÉÒÔ¼ÓÈëstringÀàÐ͵ÄÔªËØ¡£ÒòΪËûÃǶ¼¿ÉÒԳɹ¦µÄת»»Îªobject£¬ÒòΪobjectÊÇ×îÖÕ¸¸Àà¡£ËùÒÔÒÔÏ´úÂëÒ²ÊÇ¿ÉÒÔͨ¹ý±àÒëµÄ¡£
ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add("e");
|
Õâ¶Î´úÂëºÁÎÞÒÉÎʵĿÉÒÔͨ¹ýÔËÐе쬵«ÊÇÎÒÃÇÔÚµü´úµÄʱºò¾Í»á³öÎÊÌâÁË¡£ºÜÃ÷ÏÔ(int)e.Õâ¸öÇ¿ÖÆ×ª»»ÊDz»Äܳɹ¦µÄ¡£±àÒëÆ÷ÆÚ¼äÎÞ´íÎó¶ø´íÎó·¢ÉúÔÚÔËÐÐÆÚ¡£Õâ¶ÔÎÒÃÇÀ´ËµÊDz»Ï£Íû¿´µ½µÄ£¬ÄÇô·ºÐ͵Ĵ¦Àí·½Ê½ÄØ£¿

ÕâÀïÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÎÒÃÇʹÓõÄÊÇintÀàÐÍÌæ»»µÄÀàÐÍT£¬ËùÒÔÎÒÃÇÔÚaddµÄʱºò¾ÍÖ»ÄÜaddÌæ»»TµÄintÀàÐÍ£¬¶ø²»ÊÇÏë·Ç·ºÐ͵ÄÈκÎÀàÐͶ¼¿ÉÒÔadd¡£
ËùÒÔÕâÀï¼È˵Ã÷ÁËÐÔÄܺͰ²È«ÐÔ
ÕâÀïÓÐÒ»¸öÎÊÌâÐèҪעÒâÒÔÏ£¬ÎÒÃÇÔÚÉùÃ÷·ºÐÍTµÄʱºò£¬²¢²»ÊÇÒ»¶¨ÀàÐÍÃûÊÇT£¬TÊÇÔÚÒ»¸öÀàÐ͵Äʱºò£¬Èç¹ûÎÒÃÇÐèҪʹÓöà¸ö·ºÐÍÀ´ÊµÀý»¯Ò»¸öÀàÐÍ£¬ÄÇôÎÒÃǾÍÐèҪʹÓÃ˵Ã÷ÐÔµÄÃû³Æ£¬±ÈÈçTId£¬TFirstNameÖ®ÀàµÄ¡£
public class PerosnMoreTypeOfT<TId,TFirstName,TLastName>
{
private TId _id;
public TId Id
{
get { return _id; }
set { _id = value; }
}
private TFirstName _firstName;
public TFirstName FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
private TLastName _lastName;
public TLastName LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public PerosnMoreTypeOfT() { }
public PerosnMoreTypeOfT(TId tId, TFirstName
tFirstName, TLastName
tLastName)
{
this._id = tId;
this._firstName = tFirstName;
this._lastName = tLastName;
}
}
¡¡¡¡µ÷ÓôúÂë
PerosnMoreTypeOfT<int, string, string>
person
= new PerosnMoreTypeOfT<int, string, string>
(1, "Edrick", "Liu");
Console.WriteLine("ID:{0},FirstName:{1},LastName:
{2}",person.Id,person.FirstName,person.LastName); |
ÕâÊÇÐèҪעÒâһϵġ£
·ºÐÍÀàÐ͵ÄÔ¼Êø
ËùνµÄ·ºÐÍÀàÐÍÔ¼Êø£¬Êµ¼ÊÉϾÍÊÇÔ¼ÊøµÄÀàÐÍT¡£Ê¹T±ØÐë×ñÑÒ»¶¨µÄ¹æÔò¡£±ÈÈçT±ØÐë¼Ì³Ð×Ôij¸öÀ࣬»òÕßT±ØÐëʵÏÖij¸ö½Ó¿ÚµÈµÈ¡£ÄÇôÔõô¸ø·ºÐÍÖ¸¶¨Ô¼Êø£¿ÆäʵҲºÜ¼òµ¥£¬Ö»ÐèÒªwhere¹Ø¼ü×Ö¡£¼ÓÉÏÔ¼ÊøµÄÌõ¼þ¡£
Ô¼ÊøÌõ¼þÓÐÒÔÏÂ
where T : struct -ÀàÐÍT±ØÐëÊÇÖµÀàÐÍ
where T : class -ÀàÐÍT±ØÐëÊÇÒýÓÃÀàÐÍ
where T : Ifoo -ÀàÐÍT±ØÐëÖ´ÐнӿÚIfoo
where T : foo -ÀàÐÍT±ØÐë¼Ì³Ð×Ô foo
where T : new() -ÀàÐÍT±ØÐëÓÐÒ»¸öĬÈϹ¹Ô캯Êý
where T : U -Ö¸¶¨·ºÐÍÀàÐÍT1ÅÉÉúÓÚT2¡£
ÏÂÃæÎÒ»á½âÊÍÿ¸öÔ¼Êø¸ÃÔõôÓã¬Ê¹ÓÃÔ¼Êø²»µ¥µ¥¿ÉÒÔÏÞÖÆT£¬¶øÇÒ»¹¿ÉÒÔʹT¾ßÓÐÀàÐÍ¿ÉÓÃÐÔ£¬ÉÏÃæÎÒÃǽéÉÜÁË£¬ÎÒÃÇÖ»ÓÐÔÚʵÀý»¯µÄʱºò²ÅÌæ»»·ºÐÍÀàÐÍ£¬ËùÒÔÎÒÃdzýÁËÄܰѷºÐÍת»»ÎªobjectÍ⣬»ù±¾ÉÏÔÚ¶¨ÒåµÄʱºò²»ÄÜÓëÆäËûÀàÐÍ×öÈκν»»¥£¬Èç¹ûÕâÀïÎÒÔ¼Êø·ºÐÍTʵÏÖÁ˽ӿÚIFoo£¬ÄÇôÎÒÃǾͿÉÒÔ°Ñ·ºÐÍת»»ÎªIFoo£¬´Ó¶øÊ¹ÓÃIfooÀﶨÒåµÄ·½·¨¡£ÕâÑù¾ÍʹÀàÐÍÔÚ¶¨ÒåµÄʱºò¾Í¿ÉÒÔʹÓ㬶ø²»ÐèÒªµÈµ½ÊµÀý»¯¡£
¶øÖ¸¶¨TµÄÀàÐÍÊǷdz£¼òµ¥µÄ¡£
¡¡
public class Person<T>where T:struct |
Õâʱ£¬Èç¹ûÎÒÃÇʹÓÃÒýÓÃÀàÐÍÌæ»»T¾Í»á
±àÒë³ö´í¡£ÎÒÃÇÒ²¿ÉÒÔÔ¼ÊøTΪÒýÓÃÀàÐÍ£¬ÕâÀïдһ¸öÀý×Ó£¬ÔõÃ´Ê¹Ô¼ÊøÎª½Ó¿ÚºÍ»ùÀàÐÍ£¬È»ºóʹÓÃÕâЩÀàÐÍ¡£
public interface IPerson
{
void DisplayPerosnWithOutId();
void DisplayPerosnWithId();
}
¡¡¡¡¶¨Òå½Ó¿Ú¡£
public class Person<T>:IPerson where
T:MyID
{
private T _t;
public T T1
{
get { return _t; }
set { _t = value; }
}
private string _firstName;
public string FirstName
{
get { return _firstName; }
set { _firstName = value; }
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set { _lastName = value; }
}
public Person() { }
public Person(T t1, string firstName,
string lastName)
{
this._t = t1;
this._firstName = firstName;
this._lastName = lastName;
}
public void DisplayPerosnWithOutId()
{
Console.WriteLine("FirstName:{0},LastName
:{1}",FirstName,LastName);
}
public void DisplayPerosnWithId()
{
MyID myId = T1;
Console.WriteLine("ID:{0},FirstName:{1}
,LastName:{2}", myId.City + "-"
+ myId.
School + "-" + myId.ClassName + "-"
+
myId.Number, FirstName, LastName);
}
} |
ÕâÀïÈÃÎÒÃǵÄPerosnʵÏÖÕâ¸ö½Ó¿Ú£¬È»ºóÎÒÃǵÄPerosnÀïÃæµÄ·ºÐÍT±ØÐëÊǼ̳Ð×ÔMyIdµÄ¡£×¢Ò⣬ÕâÀïÔ¼ÊøµÄÊÇÎÒÃǵÄPersonµÄT
public class DisPerson<T>where T:IPerson
{
private T t { get; set; }
public DisPerson() { }
public DisPerson(T t1)
{
this.t = t1;
}
public void dis()
{
IPerson p = (IPerson)t;
p.DisplayPerosnWithId();
p.DisplayPerosnWithOutId();
}
}
|
ÕâÀï¾ÍÊÇÎÒÃǵķºÐÍÀ࣬Õâ¸öÀàµÄÔ¼ÊøÊÇT±ØÐëʵÏÖIPerson¡£ËùÒÔT¾Í¿ÉÒÔ¸úIPersonʵÏÖת»»£¬´Ó¶øµ÷ÓÃIPerosnÀïµ÷Óõķ½·¨¡£
MyID myId = new MyID("WuHan", "SanZhong",
"YiBan",
"0001");
Person<MyID> perosn = new Person<MyID>
(myId,"Edrick","Liu");
DisPerson<Person<MyID>> dis = new
DisPerson<Person<MyID>>(perosn);
dis.dis(); |
ÕâÀïʹÓõ½ÁË2ÖÖÔ¼Êø£¬¶øÖµÀàÐÍÔ¼Êø¸úÒýÓÃÀàÐÍÔ¼ÊøÊǺܼòµ¥µÄ£¬ÎÒÃÇÖ»ÐèÒªwhereһϡ£ÏÂÃæÀ´¿´¿´UÔ¼Êø¡£´úÂëºÜ¼òµ¥
public class ClassA
{
}
public class ClassB:ClassA
{
}
public class ClassC<TClassA,TClassB>
where TClassB:TClassA
{
} |
ÕâÀïClassB±ØÐëÊǼ̳ÐÊÇClassA¡£
ClassA a = new ClassA();
ClassB b = new ClassB();
ClassC<ClassA, ClassB> c = new Class
C<ClassA, ClassB>(); |
Èç¹ûÕâÀïÎÒÃǵÄClassB²»¼Ì³Ð×ÔClassA£¬ÄÇô±àÒ뽫²»ÄÜͨ¹ý¡£
Default¹Ø¼ü×Ö
default¹Ø¼ü×ÖÆäʵ²»ÐèÒª½âÊÍÌ«¶à£¬ÕâÀïÖ»½âÊÍÒ»ÏÂÔÀí¾ÍÐÐÁË¡£ÎÒÃÇÇ°ÃæÌáµ½£¬·ºÐÍÖ»ÊÇÒ»¸öÄ£°åÀàÐÍ£¬¾ÍÊÇÎÒÃÇÔÚ¶¨ÒåµÄʱºò¸ù±¾¾Í²»¿ÉÄÜÖªµÀÓû§ÔÚʵÀý»¯µÄʱºò»áÒÔºÎÖÖÀàÐÍÀ´Ìæ»»¡£ÓпÉÒÔÊÇÖµÀàÐÍ£¬Ò²ÓпÉÄÜÊÇÒýÓÃÀàÐÍ¡£ÖµÀàÐÍÊDz»Äܸ³ÖµÎªnullµÄ¡£ËùÒÔ·ºÐÍÀàÐͲ»Äܸ³ÖµÎªnull£¬µ«ÊÇÕâÀïÈÔÈ»ÓÐ50%µÄ¼¸ÂÊÊÇÒýÓÃÀàÐÍ£¬ÎÒÃÇ»¹ÊÇÐèÒª50%µÄ»ú»áÐèÒª·ºÐÍTΪnull¡£Õâʱ¾ÍÐèÒªdefault¹Ø¼ü×Ö¡£
¡¡private
T t =default(T); |
ÕâÀï¾Í¿ÉÒÔ±ÜÃâÎÒÃÇÉÏÃæËù˵µÄÎÊÌ⣬ÕâÀï»áÓÐÁ½ÖÖÇé¿ö¡£Ò»ÖÖÊÇÈç¹ûTΪֵÀàÐÍ£¬Ôò¸³Öµ0£¬Èç¹ûTΪÒýÓÃÀàÐÍÔò¸³ÖµÎªnull¡£
StaticGeneric<int>.x = 5;
StaticGeneric<int>.x = 7;
StaticGeneric<string>.x = 6;
Console.WriteLine(StaticGeneric<int>.x);
Console.WriteLine(StaticGeneric<string>.x);
|
·ºÐÍÀàµÄ¾²Ì¬³ÉÔ±
·ºÐÍÀàµÄ¾²Ì¬³ÉÔ±¸úÎÒÃÇÆ½Ê±´¦Àí¾²Ì¬³ÉÔ±ÓÐЩÐí²»Í¬¡£Ò»¶Î´úÂë¾Í¿ÉÒÔ½âÊÍÇå³þ¡£
StaticGeneric<int>.x = 5;
StaticGeneric<int>.x = 7;
StaticGeneric<string>.x = 6;
Console.WriteLine(StaticGeneric<int>.x);
Console.WriteLine(StaticGeneric<string>.x);
|
Êä³öµÄÊÇ7ºÍ6.ʹÓò»Í¬µÄÀàÐÍÌæ»»·ºÐ͵õ½µÄÊDz»Í¬µÄÀàʵÀý¡£
·ºÐͼ̳кͷºÐͽӿÚ
ÏÖÔÚÎÒÃÇÀ´¿´¿´·ºÐ͵ļ̳кͷºÐͽӿڡ£ÎÒÃÇÏÈÀ´¿´¿´·ºÐͼ̳С£
Àà¿ÉÒԼ̳Ð×Ô·ºÐÍ»ùÀ࣬·ºÐÍÀàÒ²¿ÉÒԼ̳Ð×Ô·ºÐÍ»ùÀà¡£ÓÐÒ»¸öÏÞÖÆ£¬Ôڼ̳еÄʱºò£¬±ØÐëÏÔʾָ¶¨»ùÀàµÄ·ºÐÍÀàÐÍ¡£ÎÒÃÇÀ´¿´¿´Ê¾Àý
public abstract class Base<T>where T:struct
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
public abstract T Add(T x, T y);
}
|
Ò»¸ö³éÏóÀ࣬¶¨ÒåÁËÒ»¸öIDÊôÐÔ£¬¶¨ÒåÁËÒ»¸ö³éÏó·½·¨¡£ÏÂÃæÊǼ̳ÐÀà
public class SonClass<T>:Base<int>
{
private T _t;
public T T1
{
get { return _t; }
set { _t=value;}
}
public SonClass() { }
public SonClass(T t,int id)
{
this._t = t;
base.Id = id;
}
public override int Add(int x, int y)
{
return x + y;
}
public void Prit()
{
Console.WriteLine(T1);
}
}
|
ʵÏÖÁË»ùÀàÀïÃæµÄ³éÏó·½·¨£¬±¾ÉíʵÏÖÁËÒ»¸ö·½·¨£¬ÕâÀïµÄT¸úÎÒÃǵĻùÀàµÄ·ºÐÍÀàÐÍûÓÐÈκιØÏµ¡£µ÷ÓôúÂë
SonClass<string> son = new SonClass
<string>("EdrickLiu",10);
Console.WriteLine(son.Id);
Console.WriteLine(son.Add(3,5));
son.Prit(); |
Æäʵ¸úÎÒÃǵķǷºÐͼ̳ÐûÓжàÉÙÌ«´óµÄÇø±ð¡£ÄÇô£¬·ºÐͽӿÚÄØ£¿ÆäʵҲºÜ¼òµ¥¡£ÎÒÃǶ¨ÒåÒ»¸ö½Ó¿ÚICompare<T>½Ó¿Ú£¬Õâ¸ö½Ó¿ÚºÜ¼òµ¥£¬°´Öµ±È½Ï¶ÔÏ󡣯äʵ¸ú¼Ì³Ð´óͬСÒì
public interface ICompare<T> where T:class
{
bool CompareTo(T one,T other);
}
|
Õâ¸ö½Ó¿ÚºÜ¼òµ¥£¬¶¨ÒåÁËÒ»¸ö·½·¨£¬±È½ÏÁ½¸ö¶ÔÏó£¬È»ºóÎÒÃÇʵÏÖÕâ¸ö½Ó¿Ú
public class CompareClass:ICompare<MyID>
{
public bool CompareTo(MyID one, MyID other)
{
if (one != null && other != null)
{
if (one.City == other.City && one.
School == other.School
& one.ClassName
== other.ClassName
&& one.Number == other.Number)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
} |
ÕâÀï¸ú¼Ì³ÐÒ»Ñù£¬ÊµÏÖ½Ó¿ÚµÄʱºòÐèÒªÖÆ¶¨·ºÐÍÀàÐÍ¡£È»ºóÎÒÃǾͿÉÒÔµ÷ÓÃÁË
MyID id = new MyID("Wuhan", "Shanzhong",
"YiBan",
"ET001");
MyID myid = new MyID("Wuhan", "Shanzhong",
"YiBan",
"ET002");
ICompare<MyID> compare = new CompareClass();
Console.WriteLine(compare.CompareTo(id, myid));
|
ÆäʵÓÐÁËÕâ¸ö·½·¨£¬ÎÒÃǾͿÉÒÔ²»ÐèÒªÖØÔØÔËËã·û»òÕßÖØÔØEqualsÁË¡£ÏÂÃæÎÒÃÇÀ´¿´¿´·ºÐÍ·ºÐÍ·½·¨ºÍ·ºÐÍίÍУ¬µ±³õÔÚдίÍеÄʱºòÎÒÔÚ¿¼ÂÇ·ºÐÍίÍÐÒª·ÅÔÚʲôµØ·½Ð´£¬×îºó»¹ÊÇ·ÅÔÚÕâÀïÁË¡£
·ºÐÍ·½·¨&·ºÐÍίÍÐ
·ºÐÍ·½·¨Æäʵ¸ú·ºÐÍÀà²î²»¶à£¬·½·¨ÔÚ¶¨ÒåµÄʱºòʹÓ÷ºÐÍÀàÐͶ¨Òå²ÎÊý¡£µ÷ÓõÄʱºòʹÓÃʵ¼ÊÀàÐÍÌæ»»¡£ÕâÑù¾Í¿ÉÒÔʹÓò»Í¬µÄÀàÐÍÀ´µ÷Ó÷½·¨£¬ÎÒÃÇÏÈÀ´¿´Ò»¸ö¼òµ¥µÄ£¬½»»»Á½¸öÊý¡£¿ÉÒÔÊÇintÒ²¿ÉÒÔÊÇdouble£¬»òÕß±ðµÄÀàÐÍ¡£
public static void Swap<T>(ref T x,ref
T y)
{
T temp;
temp = x;
x = y;
y = temp;
}
|
ÕâÀïʹÓÃintÊÇÒòΪÎÒÃÇÒª¸Ä±äx£¬yµÄÖµ£¬x£¬y¶¼ÊÇÖµÀàÐÍ£¬ËùÒÔÒªµ÷ÓÃref¡£µ÷ÓôúÂë¾ÍºÜ¼òµ¥ÁË
int x = 8;
int y = 9;
GenericMethod.Swap<int>(ref x,ref y);
Console.WriteLine("X:{0},Y:{1}",x,y);
|
ÎÒÃÇÕâÀïÒ²¿ÉÒÔÊ¡ÂÔ<int>£¬Ð´³ÉGenericMethod.Swap(ref x,ref
y);±àÒëÆ÷»á×Ô¼ºÅжϡ£ÕâÖ»ÊÇÒ»¸öºÜ¼òµ¥µÄ·½·¨£¬Ç°ÃæÎÒÃÇ˵¹ý·ºÐÍÓ뼯ºÏÒ»ÆðʹÓûáºÜÇ¿´ó£¬ÎÒÃÇÀ´¿´Ò»¸ö·ºÐÍ·½·¨Ó뼯ºÏÒ»ÆðʹÓõÄÀý×Ó¡£ÎÒÃÇÓÐÒ»¸öʵÌåÀàPerson£¬ËüÓÐ3¸ö×ֶΣ¬ID£¬Name£¬Salary.ÎÒÃÇҪʵÏֵŦÄܾÍÊÇ×Ô¶¯¼ÆËã×ܵÄнˮ¡£Ê×Ïȶ¨ÒåʵÌå¡£
public class SalaryPerson
{
private int _id;
public int Id
{
get { return _id; }
set { _id = value; }
}
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private decimal _salary;
public decimal Salary
{
get { return _salary; }
set { _salary = value; }
}
public SalaryPerson() { }
public SalaryPerson(int id, string name,
decimal salry)
{
this._id = id;
this._name = name;
this._salary = salry;
}
} |
È»ºóÔÙÎÒÃǸոյķºÐÍ·½·¨ÀàÀï¼ÓÈë·½·¨
public static decimal AddSalary
(IEnumerable e)
{
decimal total = 0;
foreach (SalaryPerson p in e)
{
total += p.Salary;
}
return total;
} |
ÕâÀï¾ÍÓÐÒ»¸öÎÊÌâÁË£¬ÎÒÃÇÖ»ÄÜSalaryPersonÀàÐÍÁË£¬ÄÇôÕâÀïÎÒÃǾͿÉÒÔÒýÈë·ºÐÍÁË£¬·ºÐ͵Ä×÷ÓþÍÊÇÔÚÎÒÃDz»È·¶¨ÀàÐ͵Äʱºò×öÒ»¸öÌæ»»ÀàÐÍ£¬ËùÒÔÎÒÃÇÕâÀï¾Í¿ÉÒÔʹÓ÷ºÐÍÁË¡£¸ü¸Ä¹ýºóµÄ·½·¨ÊÇ
public static decimal AddSalary<T>
(IEnumerable<T>
e) where T:SalaryPerson
{
decimal total = 0;
foreach (T t in e)
{
total += t.Salary;
}
return total;
} |
ÎÒÃÇÔÚÇ°ÃæËµµ½ÁË£¬Èç¹ûÒªÔÚ¶¨ÒåTµÄʱºòʹÓÃT£¬¾ÍÓ¦¸ÃʹËü¼Ì³ÐÓÚ»òÕßÊÇijÀ࣬»òÕßʵÏÖij¸ö½Ó¿Ú¡£µ«ÊÇÎÒÃÇÕâÀﻹÊÇÖ»ÄܼÆËãSalaryPerson»òÕßÅÉÉúÓÚSalaryPersonµÄÀ࣬ÎÒÃÇÄܲ»ÄܼÆËã±ðµÄÀ࣬¼ÆËãµÄÂß¼ÓÉÎÒÃǶ¨ÒåÄØ£¿µ±È»¿ÉÒÔ£¬¾ÍÊÇ·ºÐÍίÍС£
·ºÐÍίÍÐ
ÎÒÏëÏêϸµÄ½²½²·ºÐÍίÍУ¬ÒòΪÎÒ¾õµÃ×Ô´Ó3.0Ö®ºó·ºÐÍίÍÐÊÇÓõÃÔ½À´Ô½¶à£¬·ºÐÍίÍÐÓëlamdaÒ²ÊÇÔ½ÓÃÔ½¶à£¬lamda±í´ïʽÎÒÔÚίÍÐÒ»ÎÄÖн²µ½ÁË¡£Î¯ÍеĸÅÄîÎÒÒ²½²ÁË£¬ËùÒÔÕâÀïÎÒ²»¹ý¶àµÄ½²ÊöʲôÊÇίÍС£Î¯ÍÐÊÇ¿ÉÒÔÒýÓ÷½·¨µÄ£¬Ö»Òª·½·¨Ç©Ãû·ûºÏ£¬±ÈÈçÒ»¸öºÜ¼òµ¥µÄ·½·¨Ç©Ãûpublic
int Add(int x,int y).ÕâÀïÎÒÃÇÐèҪעÒâÁ½µã¡£Ò»µãÊÇ·µ»ØÀàÐÍ£¬Ò»µãÊDzÎÊý¡£Èç¹ûÎÒÃÇÐèÒª¶¨ÒåµÄÖ»ÊÇÒ»¸ö¹¦ÄÜ£¬µ«Êǹ¦ÄܵÄʵÏÖÒªµ½¾ßÌåµÄµØ·½²ÅÄÜÈ·¶¨£¬ÎÒÃǾͿÉÒÔʹÓÃίÍУ¬µ«ÊÇʹÓÃίÍÐÎÒÃǵķ½·¨·µ»ØÖµºÍ²ÎÊýÀàÐ;ÍÈ·¶¨ÁË£¬ÎÒÃÇ¿ÉÒÔÈÃίÍоßÓиü¸ßµÈ¼¶µÄ³éÏ󣬷µ»ØÖµ£¬²ÎÊýÀàÐͶ¼µ½¾ßÌåµÄµØ·½Öƶ¨¡£ÕâÀïµÄ¾ßÌ嵨·½¾ÍÊÇÎÒÃÇҪʵÏֵķ½·¨¡£ÕâÑù£¬ÎÒÃǵÄίÍо;ßÓиü¸ß¼¶±ðµÄ³éÏó¡£ÎÒÃÇÉè¼ÆµÄÀà¾Í¾ßÓиü¸ß¼¶±ðµÄ¿ÉÒÔÓÃÐÔ£¬ÎÒÃÇÖ»ÐèҪʵÏÖ·½·¨µÄϸ½Ú¾Í¿ÉÒÔÁË¡£·½·¨µÄϸ½ÚÔõôʵÏÖ£¬¿ÉÒÔʹÓÃÄäÃû·½·¨£¬»òÕßlamda±í´ïʽ¡£ÏÂÃæÎÒÃÇÀ´¿´¿´ÔÚ¾ßÌåµÄ´úÂëÖÐÎÒÃǸÃÔõôʵÏÖ¡£¼ÌÐøÎÒÃÇÉÏÃæµÄÄǸöÀý×Ó¡£Ê×Ïȶ¨ÒåÒ»¸öÀà
GenericInFramerwork
public delegate TResult Action<TInput,
TResult>(TInput
input,TResult result);
public static TResult GetSalary<TInput, TResult>(IEnumerable<TInput>
e, Action
<TInput, TResult>
action)
{
TResult result =default(TResult);
foreach (TInput t in e)
{
result = action(t,result);
}
return result;
}
} |
Õâ¸öÀàÀïÃæ¶¨ÒåÁËÒ»¸ö·ºÐÍίÍУ¬Î¯Íж¨ÁËÁ½¸ö²ÎÊý£¬Ò»¸öÊÇ·µ»ØÀàÐÍ£¬Ò»¸ö²Ù×÷ÀàÐÍ¡£ÕâÀï½âÊÍһϲÎÊýΪʲôҪ¼ÓÉÏ·µ»ØÀàÐÍ£¬ÒòΪÎÒÃDz»ÄÜÓÃÒ»°ãµÄËãÊõÔËËã·ûÀ´²Ù×÷·ºÐÍÀàÐÍ£¬+=ÊDz»ÔÊÐíµÄ£¬ËùÒÔÕâÀïÖ»ÄÜʹÓÃresult=action(t,result)ÄÇôÎÒÃǾÍÐèÒªÒ»¸ö·µ»ØÖµÀ´±£³Ö´«µÝÎÒÃǵÄ
result.µ÷ÓôúÂë
List<SalaryPerson> list = new List
<SalaryPerson>();
list.Add(new SalaryPerson(1,"Edrick",5000));
list.Add(new SalaryPerson(1,"Meci",3000));
list.Add(new SalaryPerson(1,"Jun",1000));
GenericAndDelegate.Action<SalaryPerson,
Decimal> a =
new GenericAndDelegate.Action
<SalaryPerson,
Decimal>(GetS);
decimal d = GenericAndDelegate.GetSalary
<SalaryPerson,
Decimal>(list, a);
Console.WriteLine(d);
Console.Read();
}
public static decimal GetS(SalaryPerson
p,decimal d)
{
d += p.Salary;
return d;
} |
Ê×ÏÈʵÀý»¯Î¯ÍУ¬È»ºóµ÷ÓÃÎÒÃǵķºÐÍ·½·¨¡£ÕâÀï¾ÍÊÇΪʲô²ÎÊýÒª¶¨Òå·µ»ØÀàÐÍ£¬ÕâÀïÈç¹ûÎÒÃÇÈ¥µô²ÎÊý£¬¶øÔÚGetS·½·¨ÀﶨÒåÒ»¸ö¾Ö²¿±äÁ¿£¬ÄÇô½á¹ûÊÇÎÒÃÇÖ»Äܵõ½×îºóÒâÏîµÄ½á¹û¡£Ïà±ÈÉÏÃæµÄÒ»¸öÀý×Ó£¬ÕâÀïµÄнˮµÄ¼ÆËãÂß¼ÍêÈ«¾ÍÊǿɱäµÄ£¬ÎÒÃÇ¿ÉÒÔÔÚµ÷ÓÃίÍеÄʱºò±ä»¯ÎÒÃǵÄÂß¼£¬±ÈÈçËùÓеļÓÉÏ200È»ºó´æ½øÊý¾Ý¿â£¬±ÈÈç¼ÓÉÏËùÓÐ*10.ÎҼǵÃ֮ǰÓÐÈË̸¹ýÒ»¸öÎÊÌ⣬¾ÍÊÇίÍеı仯¹ý³Ì£¬ÎÒÃÇÕâÀïʹÓõÄÊÇ×îÔʼµÄίÍеÄʵÀý»¯£¬ÏÂÃæÎÒ¾ÍÀ´¸ÅÀ¨Ò»ÏÂίÍеÄʵÀý»¯µÄ·¢Õ¹¡£ÉÏÃæ×îÔʼÎÒµÄÎҾͲ»½éÉÜÁË¡£»¹ÓÐ
GenericAndDelegate.Action<SalaryPerson,Decimal>
a = GetS;
|
ÕâÀï¾ÍÊÇÖ±½Ó°Ñ·½·¨Ãû³Æ¸³¸øÎ¯ÍУ¬ÕâÊǵڶþ½×¶Î¡£ÎÒÃÇ¿ÉÒÔ¿ÉÒÔ²»ÊµÀý»¯Î¯ÍУ¬Ö±½Ó°Ñ·½·¨Ãûµ±×ö²ÎÊý´«µÝ¸ø·½·¨¡£
decimal d = GenericAndDelegate.GetSalary<SalaryPerson,
Decimal>(list, GetS);
|
ÔÙÍùºóÄØ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÄäÃû·½·¨
GenericAndDelegate.Action<SalaryPerson,
Decimal> a =
delegate(SalaryPerson p,
decimal d1) { d1
+= p.Salary; return d1; };
decimal d = GenericAndDelegate.GetSalary
<SalaryPerson,
Decimal>(list, a); |
ÏÖÔÚÄØ£¿ÎÒÃǾͿÉÒÔʹÓÃlamda±í´ïʽÁË¡£
decimal d = GenericAndDelegate.GetSalary
<SalaryPerson,
Decimal>(list, (p,dl)=>dl+
=p.Salary); |
ÕâÀïµÄp£¬dlÎÒÃÇÊ¡ÂÔÁËÀàÐÍ£¬µ«ÊDZàÒëÆ÷»á°ïÎÒÃÇÍÆ¶Ï£¬µ±È»£¬Äã¼ÓÉÏÒ²ÊÇûÓÐÎÊÌâµÄ
decimal d = GenericAndDelegate.GetSalary
<SalaryPerson,
Decimal>(list, (SalaryPerson
p,decimal dl)=>dl+=p.Salary); |
ÎÒÃÇÕâÀïÒ²¿ÉÒÔ¼ÓÉÏÎÒÃDz»Í¬µÄÂß¼¡£ÕâÀïÎÒÃǾͲ»µ¥µ¥ÊÇÖ»ÄܶÔSalaryPerson×ö²Ù×÷ÁË£¬»¹ÄܶԱðµÄ¶ÔÏó×ö²Ù×÷¡£
decimal d = GenericAndDelegate.GetSalary
SalaryPerson, Decimal>(list,
(SalaryPerson
p,decimal dl)=>dl+=p.Salary/10); |
ÕâÀïµÄ·ºÐÍίÍÐÊÇÎÒÃÇ×Ô¼ºµÄÀý×Ó£¬ÉÏÃæÒ²ËµÁË£¬·ºÐÍίÍÐÔÚÎÒÃǵÄ.netframerworkÖеÄÓ¦ÓÃÒ²ºÜ¹ã·º£¬ÎÒÃǾÙÁ½¸öÀý×Ó£¬Ò»¸öÊÇÔÚÊý×éÖУ¬Ò»¸öÊÇÔÚlinqÖУ¬ÕâÀï²»½éÉÜ
Linq£¬ÎÒÖ»ÊǾÙÀý˵Ã÷¡£
int[] ints = { 2,4,6,5,8,9,10};
Array.Sort<int>(ints, (i, j) => i.CompareTo(j));
Array.ForEach(ints, i => Console.WriteLine(i*2));
var query = ints.Where(i => i > 2);
foreach (int i in query)
{
Console.WriteLine(i);
}
Console.Read();
|
ÎÒÃÇÖ»ÐèÒªÕÒµ½¶ÔÓ¦µÄίÍУ¬È»ºó±àдlamda¾Í¿ÉÒÔÁË¡£
·ºÐÍÀàÐ͵ÄʵÀý»¯¹æÂÉ
ÕâÒ»½ÚÖ÷ÒªÊÇÒªÎÒÃÇÁ˽âһϷºÐÍÔÚʵÀý»¯Ê±ºòµÄ¹æÂÉ¡£ÎÒÃÇ¿ÉÒÔÓÃÖµÀàÐÍ»òÕßÒýÓÃÀàÐÍʵÀý»¯·¶Î§£¬ÓÃÖµÀàÐͺÍÒýÓÃÀàÐÍÓÐÊ²Ã´Çø±ðÄØ£¿ÎÒÃÇʹÓÃÖµÀàÐÍʵÀý»¯·ºÐÍ£¬Ã¿´ÎʵÀý»¯¶¼»á´´Ô첻ͬµÄʵÀý£¬µ«ÊÇÈç¹ûʵÀý»¯µÄÀàÐͲ»Í¬£¨¶¼ÊÇÖµÀàÐÍ£©£¬ÄÇô¾Í»á´´Ô첻ͬµÄ°æ±¾£¬²»Í¬µÄʵÀý£¬ÒýÓÃÀàÐÍÔò²»Í¬£¬ÒýÓÃÀàÐÍ»áһֱʹÓõÚÒ»´ÎʵÀý»¯·ºÐÍʱºòµÄ°æ±¾¡£ÒòΪֵÀàÐÍÐèÒª¸´ÖÆÊý¾Ý£¬Êý¾ÝµÄ´óСÊDz»Í¬µÄ£¬ËùÒÔÓв»Í¬µÄ°æ±¾£¬¶øÒýÓÃÀàÐÍÖ»ÐèÒª´«µÝÒýÓã¬ËùÒÔ¿ÉÒÔʹÓÃͬһ¸ö°æ±¾¡£
List<int>ºÍList<int>»áÊÇͬ¸ö°æ±¾²»Í¬ÊµÀý£¬µ«ÊÇËûÃǹ²Ïílist<int>µÄµ¥¸öʵÀý¡£
List<int>ºÍList<long>»á´´Ô첻ͬµÄ°æ±¾£¬²»Í¬µÄʵÀý¡£Õâ¾ÍÊÇÎÒÃÇÉÏÃæËµµÄ¾²Ì¬Öµ²»Í¬µÄÔÒò¡£
List<string>ºÍList<object>»ò´´Ôìͬһ°æ±¾µ«ÊÇʵÀý²»Í¬¡£
ÕâЩÎÒÃÇÀí½â¾ÍÐÐÁË¡£
»¹ÓÐÒ»µãÐèҪעÒ⣬·ºÐÍÀàÐÍÔÚÌí¼ÓÕû¸ö¼¯ºÏµÄʱºò²»Ö§³ÖÒþʽת»»£¬±ÈÈç
List<object> o = new List<object>();
List<int> iss = new List<int>();
iss.Add(1);
o.AddRange(iss);
|
ÕâÀïÎÒÃÇÐèÒªÏÔʾת»»Ò»Ï£¬ÎÒÃÇ¿ÉÒÔдһ¸ö·½·¨¡£
public void Convert<TInput,TOut>(IList<TInput>
input,IList<TOut> outo) where TInput:TOut
{
foreach (TInput t in input)
{
outo.Add(t);
}
}
|
·ºÐÍÕâÀïÒ²½éÉܵò¶àÁË£¬.netframerworkÖÐÓÐЩ·ºÐÍ£¬±ÈÈçNullable<T>ÎÒÔÚ¿É¿ÕÀàÐͽéÉÜÁË£¬Ê¼þ·ºÐÍ£¬ÎÒ»áÔÚʼþÖнéÉÜ¡£·ºÐ͸ú·´ÉäÎÒ»áÔÚ·´ÉäÖнéÉÜ£¬·ºÐ͸úÊôÐÔ£¬ÎÒ»áÔÚÊôÐÔÖнéÉÜ¡£×îºó¾ÍÊÇÒ»¸öÀàÐÍÁË£¬½éÉÜһϡ£ArraySegment<T>.±íʾÊý×é¶Î¡£Ö±½Ó¿´´úÂë°É
int[] ints = { 2,3,4,5,6,7,8,9};
ArraySegment<int> arr = new ArraySegment
<int>(ints,
2, 3);
for (int i = arr.Offset; i < arr.Count+
arr.Offset; i++)
{
Console.WriteLine(arr.Array[i]);
} |
OffsetÊÇÏà¶ÔÔÊý×éµÄË÷Òý£¬¶øcountÊÇÏÖÔÚµÄÈÝÁ¿
·ºÐ;ͽéÉÜÍêÁË£¬¸öÈËÈÏΪ»¹ÊǽéÉܵñȽÏÏêϸµÄ¡£ |