|
■No67054 (裕猫 さん) に返信
> object[] Sisuoka = new object[4]
セミコロンが抜けているのはともかくとして、
変数の中身が空っぽですが、それで良いのでしょうか?
> NOUGYOU 例 = new NOUGYOU();
これだと名前空間が通らないハズです。代入式の右辺は
× new NOUGYOU();
〇 new Kouzoutai.NOUGYOU();
〇 new DBS.Kouzoutai.NOUGYOU();
〇 new global::DBS.Kouzoutai.NOUGYOU();
ではないでしょうか。変数宣言の型名も然り。
> KCopy.Kangen(Sisuoka, 例);
ここは静的メソッド(static void Main) の中ですから、
インスタンス変数 Sisuoka にはアクセスできません。
インスタンスメソッドからアクセスするようにするか、もしくは
object[] な変数を静的にしてみてください。
> struct KOUZOUは使えないとエラーを出します。
元のコードが文法的に問題だらけなので、やりたいことに合致しているか
自信がありませんが、これで如何でしょう。
//----------------------
namespace DBS
{
public class Kouzoutai
{
public struct NOUGYOU
{
public string 米;
public string 産地;
public string 生産日;
public int 金額;
}
public struct KOUGYOU
{
public string 部品;
public string 生産日;
public int 金額;
}
}
}
//----------------------
using System;
using DBS;
namespace 構造体TEST
{
class Program
{
static object[] Sisuoka = {"コシヒカリ", "福島", "2012/09/25", 3000};
static object[] Fuji = { "平座金M5/SUS304", "2012/01/25", 3500 };
static void Main(string[] args)
{
Kouzoutai.NOUGYOU 例 = new Kouzoutai.NOUGYOU();
Kouzoutai.KOUGYOU 金属 = new Kouzoutai.KOUGYOU();
Sample.FillValues(ref 例, Sisuoka);
Sample.FillValues(ref 金属, Fuji);
Console.WriteLine(例.米);
Console.WriteLine(例.産地);
Console.WriteLine(例.生産日);
Console.WriteLine(例.金額.ToString());
Console.WriteLine("------------");
Console.WriteLine(金属.部品);
Console.WriteLine(金属.生産日);
Console.WriteLine(金属.金額.ToString());
Console.WriteLine("------------");
例 = Sample.ToStruct<Kouzoutai.NOUGYOU>("日本晴", "新潟", "2012/09/22", 3000);
Console.WriteLine(例.米);
Console.WriteLine(例.産地);
Console.WriteLine(例.生産日);
Console.WriteLine(例.金額.ToString());
Console.ReadLine();
}
}
}
//----------------------
internal static class Sample
{
public static T ToStruct<T>(params object[] values) where T : struct
{
T result = default(T);
FillValues(ref result, values);
return result;
}
public static void FillValues<T>(ref T t, params object[] values) where T : struct
{
var fields = typeof(T).GetFields().ToArray();
int limit = Math.Min(fields.Length, values.Length);
object box = t;
for (int i = 0; i < limit; i++) fields[i].SetValue(box, values[i]);
t = (T)box;
}
}
//----------------------
|