C# Web アプリケーションでジェネリックを作成し、silverlight-5 を使用しようとしています。これは、C# コンソール アプリケーションに既に実装されています。
Vs-2010でasp.net、c#、およびsilverlight(およびxamlを使用したGUI)を使用して、webdevelopmentで同じことをしようとしています。その GUI は、コードの実行時に Internet Explorer に表示されます (ボタン クリック イベントによる)。
コンソールアプリケーションでは、次のコードでこれを行います:(コードは、コンソールアプリケーションの唯一の引数としてバイナリファイルを読み取り、そのファイル内のシンボルを読み取ることです。これらsymbol
は可能性がありますint32/int16/int64/UInt32
)。したがって、このSymbol
変数を「ジェネリック」( <T>
) にする必要があります。コンソール アプリケーションでは、このコードは正常に動作します。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace check
{
LINE:1 public class Huffman < T > where T: struct,IComparable < T >,IEquatable < T >
{
public int data_size, length, i, is_there;
public class Node
{
public Node next;
line:2 public T symbol; // This symbol is of generic type.
public int freq;
}
public Node front, rear;
LINE:3 public Huffman(string[] args, Func < byte[], int, T > converter)
{
front = null;
rear = null;
int size = Marshal.SizeOf(typeof (T));
using(var stream = new BinaryReader(System.IO.File.OpenRead(args[0])))
{
long length = stream.BaseStream.Length;
for (long position = 0; position + size < length; position += size)
{
byte[] bytes = stream.ReadBytes(size);
LINE:4 T processingValue = converter(bytes, 0); //**Here I read that symbol and store in processing value which is of type <T>**
//Then further i use this processingValue and "next" varible(which is on Node type)
}
}
}
}
public class MyClass
{
public static void Main(string[] args)
{
line:5 Huffman < long > ObjSym = new Huffman < long > (args, BitConverter.ToInt64);
// It could be "ToInt32"/"ToInt16"/"UInt16"/"UInt32"/"UInt64" with respective
//change in <int>/<short> etc.
//Then i further use this ObjSym object to call function(Like Print_tree() here and there are many more function calls)
ObjSym.Print_tree(ObjSym.front);
}
}
}
C#silverlight(Webアプリケーション)で達成しなければならないのと同じことですが、ボタンをクリックして(参照することで)ファイルをすでにアップロードして保存しているという違いがあります(一方、コンソールアプリケーションで唯一の引数としてファイルをアップロード/読み取りました)、このファイルのアップロード部分は、すでに行っています。
問題は、ここでこの「シンボル」変数を generic( <T>
)にする方法です。これは、パラメーター BitConverter.ToInt32/64/16 (コンソール アプリケーションで行っているので、コードを参照してください)。
注:コードのLINE 1,2,3,4,5で使用したことを確認してください(そのため、以下のコードで「シンボル」を作成するには、同じ(または他のアプローチがある場合は異なる)を達成する必要があります)タイプ )
C#では、このようなコードの本体を取得するため
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace check
{
public partial class MainPage : UserControl
{
public class Node
{
public Node next;
public long symbol; // This symbol is of generic type.
public int freq;
}
public Node front, rear;
public MainPage()
{
InitializeComponent();
}
}
}
このWebアプリケーションのコードをコンソールアプリケーションのコードとまったく同じように変更するのを手伝ってくれませんか(「Symbol variable as generic
(<T>
)」を作成することを意味します)
編集:私がこれを行うとき:
(1) public partial class MainPage <T> : UserControl, IComparable < T > where T: struct,IEquatable < T >
(2) public T symbol; (In Node class)
(3) And all the buttons and boxes i created are given not existing in current context.
その後、エラーが発生します
Error :The name 'InitializeComponent' does not exist in the current context
c# Silverlight Webアプリケーションで同じことを達成するのを手伝ってくれませんか? 大きな助けになるでしょう、ありがとう。