C# 웹 응용 프로그램 및 실버 라이트 5를 사용하여 제네릭을 만들려고합니다. 이것은 C# 콘솔 응용 프로그램에서 이미 구현되었습니다.C# 웹 응용 프로그램에서 제네릭을 사용하는 동안 initializecomponent()가 현재 컨텍스트에 존재하지 않습니다.
Vs-2010에서 asp.net, C# 및 silverlight (및 GUI xaml 사용)를 사용하여 webdevelopment에서 동일한 작업을 수행하려고합니다. 코드를 실행하면 인터넷 익스플로러에 GUI가 표시됩니다 (버튼 클릭 이벤트로).
콘솔 응용 프로그램에서는 다음 코드를 사용합니다. (이 코드는 콘솔 응용 프로그램에서 유일한 인수로 이진 파일을 읽고이 파일의 기호를 읽는 것입니다.이 symbol
은 int32/int16/int64/UInt32
등이 될 수 있습니다). 따라서 Symbol
변수를 "generic"(<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);
}
}
}
I은 파일 읽기/업로드 된 반면 난 (C# 1 실버 이미 업로드 (이를 검색하여) 버튼을 클릭하여 파일을 저장 한 차이가 (웹 애플리케이션)에서 달성해야 똑같은 콘솔 응용 프로그램의 유일한 인수),이 파일 업로드 부분은 이미 완료되었습니다.
문제는 지금 내가 매개 변수를 전달할 수 (메인 (문자열 []에 args) 메소드에서) 어떤 객체 생성을 볼 수 없습니다이기 때문에 여기 "기호"변수 일반을 (<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();
}
}
}
같은 코드의 신체를 얻을 수 있기 때문에 유형의 "기호")
로 만들려면 (내 말은 "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# 실버 웹 응용 프로그램에서 동일한을 달성 좀 도와 주 시겠어요 오류 준다? 고마워, 고마워.
고마워요. Bhai :) 콘솔 응용 프로그램과 웹 응용 프로그램의 차이점이 있다면 작동하게되면 곧 표시 될 것입니다. 콘솔에서도 동일한 문제를 해결할 수있었습니다. – Sss
그렇습니다.이 두 가지는 많은 차이가 있습니다. Silverlight 응용 프로그램을 개발하는 데 더 많은 것을 배워야합니다. C#뿐만 아니라 그 이상을 포함합니다. 이것을 배우십시오. –
예 코드가 작동했지만 그때 그것을 구현하는 데 노력했다 여기를 참조하십시오 감사합니다 : http://stackoverflow.com/questions/22887558/generics-t-not-working-on-object-creation-even- 디버깅 안함 – Sss