在C#中如何在函數參數中返回結構數組?
2024-07-21 02:25:38
供稿:網友
頭暈腦漲地研究了一天,就為了實現在函數的參數中返回結構數組。
現供大家分享,節省學習時間。
實例:
/// <summary>
/// 用戶信息結構
/// </summary>
public struct tuser
{
public string loginname;
public string loginpass;
public string truename;
public string email;
public int level;
}
/// <summary>
/// 獲得所有注冊用戶
/// </summary>
/// <param name="userinfo">返回用戶信息結構</param>
public bool getusers(out tuser[] g_userinfo)
{
userop.tuser[] f_tuser;
int currec = 0; //初始化記錄計數器
int rec_count =0; //計算總記錄數
sqlconnection myconn = new sqlconnection(connectionstring);
string cmd="select * from " +m_table; //sql查詢語句
sqlcommand mycmd=new sqlcommand(cmd,myconn);
mycmd.connection.open(); //打開連接
sqldatareader adr = null; //創建數據讀取器
try
{
adr = mycmd.executereader();
while(adr.read ())
{
rec_count += 1;
}
myconn.close(); //關閉數據庫連接
mycmd.connection.open (); //打開數據庫連接
try
{
adr = mycmd.executereader ();
f_tuser = new userop.tuser[rec_count];
while(adr.read())
{
f_tuser[currec].loginname = adr["us_loginname"].tostring();
f_tuser[currec].loginpass = adr["us_loginpass"].tostring ();
f_tuser[currec].truename = adr["us_truename"].tostring ();
f_tuser[currec].email = adr["us_email"].tostring ();
f_tuser[currec].level = int32.parse (adr["us_level"].tostring ());
currec += 1;
}
g_userinfo = f_tuser;
myconn.close (); ///關閉連接
return true;
}
catch
{
myconn.close();
f_tuser = new userop.tuser[1];
f_tuser[0].loginname = "";
f_tuser[0].loginpass = "";
f_tuser[0].truename = "";
f_tuser[0].email = "";
f_tuser[0].level = 0;
g_userinfo = f_tuser;
return false;
}
}
catch
{
myconn.close ();
f_tuser = new userop.tuser[1];
f_tuser[0].loginname = "";
f_tuser[0].loginpass = "";
f_tuser[0].truename = "";
f_tuser[0].email = "";
f_tuser[0].level = 0;
g_userinfo = f_tuser;
return false;
}
///////////////// 在web form中調用如下:
private void button3_click(object sender, system.eventargs e)
{
ksbm.userop.tuser[] f_tuser; // = new ksbm.userop.tuser(); ///為什么不"new" 一個結構數組呢?因為傳進來的已是我們要的數據了,所以只要開辟一個存儲空間就行了.
ksbm.userop f_usop = new ksbm.userop();
bool ret=f_usop.getusers (out f_tuser); ///調用函數,取得結構數組及信息
if(f_tuser.length !=0) //數據長度為0時,表明無返回數據.
{
for(int iloop=0;iloop<f_tuser.length;iloop++) ///遍歷數組并輸出到客戶端的瀏覽器
{
response.write (f_tuser[iloop].loginname);
response.write (f_tuser[iloop].loginpass);
response.write (f_tuser[iloop].truename);
response.write (f_tuser[iloop].email);
response.write (f_tuser[iloop].level);
}
}
}