Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > ใช้ IF กำหนดตัวแปร var ภายใน { } พอจบ if ทำไมอ้างอิงตัวแปรต่อไม่ได้ครับ



 

ใช้ IF กำหนดตัวแปร var ภายใน { } พอจบ if ทำไมอ้างอิงตัวแปรต่อไม่ได้ครับ

 



Topic : 047642

Guest




private void showdata()
{
if (showdatatype == "A")
{
var ac = (from a in db.accharts
select a).OrderBy(o => o.glcode)
}
else if (showdatatype == "B")
{
var ac = (from a in db.accharts
select a).OrderByDescending(o => o.glcode)
if(ac.count() > 0) // ตรงนี้ไม่มีปัญหา
{
..
}

}

if (ac.count() > 0) // ตรงนี้ Error ครับ เครื่องไม่รู้จัก ac
{
..
}

}
รบกวนผู้รู้ตอบด้วยครับ



Tag : .NET, Ms SQL Server 2008, Win (Windows App), VS 2010 (.NET 4.x)







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-08-25 14:41:26 By : man View : 1828 Reply : 6
 

 

No. 1



โพสกระทู้ ( 6 )
บทความ ( 0 )



สถานะออฟไลน์


ผมเองก็ยังไม่เคยเขียน VS 2010 (ใช้ แต่ 2008) ครับรู้สึกในโค้ดจะเขียน Linq /C#
แต่เท่าที่ดูในโค้ดที่คุณเขียนเกิดจาก ตัวแปร มันอยู่ในคนละ Scope กันซึ่ง ตัวแปรจะโดนคืนค่า เมื่อจบ if แรก


if (showdatatype == "A")
{
var ac = (from a in db.accharts
select a).OrderBy(o => o.glcode)
}
else if (showdatatype == "B")
{
var ac = (from a in db.accharts
select a).OrderByDescending(o => o.glcode)
if(ac.count() > 0) // ตรงนี้ไม่มีปัญหา
{
..
}

}//ตรงนี้ครับ ตัวแปร ac น่าจะโดนทำลายไปแล้ว
เมื่อเปิด tag if ใหม่ ac จะใช้งานไม่ได้แล้ว

**วิธีแก้คือประกาศไว้ก่อน if ตัวแรกเลยครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-25 16:52:35 By : Conair
 


 

No. 2

Guest


แล้วการประกาศตัวแปรไว้ล่วงหน้าใช้คำสั่งอะไรครับ
เช่น
var ac; // อย่างนี้ก็รู้สึกว่าจะ Error เหมือนกัน
if (showdatatype == "A")
{
ac = (from a in db.accharts
select a).OrderBy(o => o.glcode)
}

ไม่รู้ว่าจะกำหนด var ยังไง หรือกำหนด Option อื่นๆเพิ่มเติมได้ไหม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-25 22:10:05 By : man
 

 

No. 3



โพสกระทู้ ( 18 )
บทความ ( 0 )



สถานะออฟไลน์


คือ การประกาศตัวแปล จะต้องดู scope ด้วยครับ แบบตัวอย่างนี้ ประกาศตัวแปลภายใน if จะไม่สามารถนำตัวแปลนั้นไปใช้นอก if ได้ ทางแก้คือ ให้ประกาศตัวแปลแบบ private หรือ public มาลองรับตัวแปลภายใน if
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-26 10:14:02 By : mrjenova
 


 

No. 4



โพสกระทู้ ( 6 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : man เมื่อวันที่ 2010-08-25 22:10:05
รายละเอียดของการตอบ ::
รู้สึกว่าต้อง default ค่าก่อนนะครับ

var ac = from a in db.accharts select a; //ไม่รู้ว่าถูกป่าว ผมก็ไม่ค่อยได้ไช้ linq
**หลังจากนั้น ก็เปลี่ยนค่าไปตาม เงื่อนไขที่ต้องการ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-26 15:09:10 By : Conair
 


 

No. 5

Guest


ผมจะ public var ac;

หรือ

private var ac;

รู้สึกว่าจะไม่ได้ มัน Error อ่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-26 17:50:10 By : man
 


 

No. 6



โพสกระทู้ ( 1,603 )
บทความ ( 1 )



สถานะออฟไลน์


ถือว่าคุณเข้าใจว่าตัวแปรคืออะไร มีกี่ type แตกกต่างกันอย่างไร แล้วนะคะ
( อะทดสอบกันก็ได้ Reference type ของ .Net คือตัวแปรประเภทไหนบ้าง )

Scope ของตัวแปรใน .NET มี 3 ระดับค่ะที่คุณใช้คือระดับ block scope หรือ nest scope
เป็นระดับ sub local อีกที อธิบายเท่านี้แหละค่ะ
คราวหลังใส่ tag ตรง code มาด้วยนะคะจะได้อธิบายให้ยาวๆหน่อย
code ที่ใส่ tag แล้วจะดุง่ายๆ สบายตาอ้างอิงได้ง่ายด้วยค่ะ
พี่วินเจ้าของเวปนี้ทุ่มเทสร้างมาให้ใช้แล้ว กล้าๆใช้ด้วยก้อดีนะคะ

ยกตัวอย่าง code ที่หุ้มด้วย tag จะแสดงผลออกมาแบบนี้
Code (C#)
         public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
        {
            if (dictionary == null)
                throw new ArgumentNullException("dictionary");

            if (type == typeof(ListItemCollection))
            {
                // Create the instance to deserialize into.
                ListItemCollection list = new ListItemCollection();

                // Deserialize the ListItemCollection's items.
                // <Snippet5>
                ArrayList itemsList = (ArrayList)dictionary["List"];
                for (int i=0; i<itemsList.Count; i++)
                    list.Add(serializer.ConvertToType<ListItem>(itemsList[i]));
                // <Snippet5>

                return list;
            }
            return null;
        }




ประวัติการแก้ไข
2010-08-26 21:25:02
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-08-26 21:20:45 By : blurEyes
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ใช้ IF กำหนดตัวแปร var ภายใน { } พอจบ if ทำไมอ้างอิงตัวแปรต่อไม่ได้ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่