在 C# Web 应用程序中使用泛型时,初始化组件() 在当前上下文中不存在
本文关键字:不存在 组件 初始化 上下文 Web 应用程序 泛型 | 更新日期: 2023-09-27 17:56:53
我正在尝试在 c# Web 应用程序中创建一个泛型并使用 silverlight-5。我已经在 c# 控制台应用程序中实现了这一点。
我正在尝试在 Vs-2010 中使用 asp.net、c# 和 silverlight(以及使用 xaml 的 GUI)在 Web 开发中做同样的事情。 运行代码时,其 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 应用程序)中实现相同的事情,但不同的是我已经通过按钮单击(通过浏览它)上传并存储了文件(而我在控制台应用程序中将文件作为唯一的参数上传/读取),这个文件上传部分我已经完成了。
现在的问题是如何使这个"符号"变量 generalric( <T>
) 在这里,因为我无法看到任何对象创建(在 main(string[] args 方法中),我可以在其中传递参数 BitConverter.ToInt32/64/16(就像我在控制台应用程序中所做的那样,请参阅代码)。
注意:请注意,请参阅我在代码中的第 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 应用程序中实现相同的目标吗?会是一个很大的帮助,谢谢。
下面是一个例子。
namespace check
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
// Use the generic type Test with an int type parameter.
Test<int> Test1 = new Test<int>(5);
// Call the Write method.
Test1.Write();
// Use the generic type Test with a string type parameter.
Test<string> Test2 = new Test<string>("cat");
Test2.Write();
}
}
class Test<T>
{
T _value;
public Test(T t)
{
// The field has the same type as the parameter.
this._value = t;
}
public void Write()
{
MessageBox.Show(this._value);
}
}
}
我想你问的是这样的例子。
你可以像不使用 XAML 一样使用泛型。但是,如果要使用 XAML 定义控件,则不能使用泛型。这就是出现问题的原因。
创建一个另一个类并使用它。我认为这对你有帮助。