網站首頁 編程語言 正文
從.NET 3.0開始,在方法內部可以使用var關鍵字聲明局部變量。var關鍵字到底是什么?在何種情況下使用呢?
var關鍵字用來隱式地聲明一個數據類型,變量類型是在編譯期確定的,而不是在運行時確定的
聲明一個var變量a,把整型數10賦值給a,接著把一個字符串賦值給變量a。運行發現報錯:無法將類型string隱式轉換為int。
聲明一個var變量a,把整型數10賦值給a,接著把一個字符串賦值給變量a。運行發現報錯:無法將類型string隱式轉換為int。
這說明:用var聲明一個變量時,雖然不是顯式聲明,但在編譯期,已經確定了變量的類型。
通過反編譯同樣可以證明以上推斷。
→把a = "abc";這行代碼去掉,并生按F6生成解決方案。
→打開"VS2012開發人員命令提示",輸入如下命令
→在"解決方案資源管理器"中右鍵項目的名稱,選擇"在文件資源管理器中打開文件夾",再點擊bin,Debug文件夾,在地址欄中賦值Debug文件夾的路徑
→點擊"IL DASM"的文件--打開,輸入剛才拷貝的Debug文件夾路徑,再選擇.exe后綴的可執行文件,雙擊"Main:void(string[])"。在IL代碼中:
可以看出:變量a已經是Int類型,并且是一個局部變量。
var關鍵字讓編碼更簡短
對于一些名稱比較長的類,當創建類實例的時候,用var關鍵字看上去更簡短。當然這個理由是比較牽強的~~
class Program
{
static void Main(string[] args)
{
HelloIHaveALongLongName<string, string> obj = new HelloIHaveALongLongName<string, string>();
}
}
public class HelloIHaveALongLongName<T, T>
{
public string Name;
}
如果使用var關鍵字,就變成:
var obj = new HelloIHaveALongLongName<string, string>();
obj.Name = "hello";
可見,用var關鍵字,讓寫法更簡短,并且var變量是一個強類型。
var關鍵字與匿名類型
通過LINQ表達式返回一個匿名類型。
static void Main(string[] args)
{
string[] strs = {"hello", "world", "nice", "to", "meet", "you"};
object o = from s in strs
where s.Length > 3
select new {s.Length, s};
}
以上,object類型變量o并不是一個強類型變量。
如果我們用強類型的類來接收LINQ返回的集合。
class Program
{
static void Main(string[] args)
{
string[] strs = {"hello", "world", "nice", "to", "meet", "you"};
IEnumerable<SomeData> o = from s in strs
where s.Length > 3
select new SomeData() {Key = s.Length, Value = s};
foreach (SomeData item in o)
{
Console.WriteLine(item.Key);
}
}
}
public class SomeData
{
public int Key;
public string Value;
}
以上,在IEnumerable<SomeData>類型集合中,每一個集合元素都是強類型。
如果用var關鍵字來接收LINQ返回的匿名類型集合。
class Program
{
static void Main(string[] args)
{
string[] strs = { "hello", "world", "nice", "to", "meet", "you" };
var o = from s in strs
where s.Length > 3
select new { Key = s.Length, Value = s };
foreach (var item in o)
{
Console.WriteLine(item.Key);
}
}
}
以上,var類型變量o接收匿名類型集合,該集合的每個元素也是強類型。也就是說,編譯器在編譯的時候自動推斷類型。
總結:
- 通過var關鍵字聲明的變量,變量類型是在編譯期確定的,而不是在運行時確定
- 對于LINQ表達式返回的匿名類型,可以用var關鍵字聲明的變量接收
- 對于一些名稱比較長的類,類實例化的時候,可以用var關鍵字聲明的變量接收
原文鏈接:https://www.cnblogs.com/darrenji/p/3959516.html
相關推薦
- 2022-12-09 React內部實現cache方法示例詳解_React
- 2022-12-12 C語言中組成不重復的三位數問題_C 語言
- 2022-08-03 基于PyQt5完成pdf轉word功能_python
- 2022-03-24 C語言常見的文件操作函數_C 語言
- 2022-10-24 C++??STL?_?Vector使用及模擬實現_C 語言
- 2022-10-01 React?Hook中useState更新延遲問題及解決_React
- 2022-08-01 Python+Selenium鍵盤鼠標模擬事件操作詳解_python
- 2022-01-09 WHATWG API——url.parse()的替代方案
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支