小编Ija*_*een的帖子

向.NET应用程序添加脚本功能

我有一个用C#编写的小游戏.它使用数据库作为后端.这是一个交易卡游戏,我想将卡的功能实现为脚本.

我的意思是我基​​本上有一个接口,ICard卡类实现(public class Card056: ICard)并包含游戏调用的函数.

现在,为了使事物可维护/可修改,我想让每张卡的类作为数据库中的源代码,并在第一次使用时实际编译它.因此,当我必须添加/更换卡时,我只需将其添加到数据库并告诉我的应用程序刷新,而无需任何组件部署(特别是因为我们将讨论每个卡的1个组件,这意味着数百个组件) .

那可能吗?从源文件注册一个类,然后实例化它,等等.

ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);
Run Code Online (Sandbox Code Playgroud)

如果可以用任何.NET语言编写脚本,那么语言就是C#但是额外的奖励.

.net c# compiler-construction scripting

72
推荐指数
6
解决办法
2万
查看次数

浮点数解析:是否存在Catch All算法?

多文化编程的一个有趣部分是数字格式.

  • 美国人使用10,000.50
  • 德国人使用10.000,50
  • 法国使用10 000,50

我的第一种方法是取字符串,向后解析它,直到我遇到一个分隔符并将其用作我的小数分隔符.有一个明显的缺陷:10.000将被解释为10.

另一种方法:如果字符串包含2个不同的非数字字符,请使用最后一个作为小数点分隔符并丢弃其他字符.如果我只有一个,检查它是否多次出现并丢弃它,如果有的话.如果只出现一次,请检查它后面是否有3位数字.如果是,则丢弃它,否则,将其用作小数分隔符.

显而易见的"最佳解决方案"是检测用户的文化或浏览器,但如果你有一个使用en-US Windows /浏览器的法国人,这不起作用.

.net Framework是否包含一些神秘的黑魔法浮点解析器,比Double.(Try)Parse()尝试自动检测数字格式更好?

.net c# asp.net globalization internationalization

63
推荐指数
4
解决办法
2629
查看次数

在C#/ VB.NET中解码T-SQL CAST

最近我们的网站因Asprox僵尸网络 SQL注入攻击的复苏而黯然失色.攻击试图通过在ASCII编码的BINARY字符串中编码T-SQL命令来执行SQL代码.它看起来像这样:

DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--
Run Code Online (Sandbox Code Playgroud)

我能够在SQL中对此进行解码,但我有点担心这样做,因为我当时并不确切知道发生了什么.

我试着写一个简单的解码工具,所以我可以解码这种类型的文本,甚至不用触及SQL Server.我需要解码的主要部分是:

CAST(0x44004500...06F007200 AS
NVARCHAR(4000))
Run Code Online (Sandbox Code Playgroud)

我已经尝试了以下所有命令而没有运气:

txtDecodedText.Text =
    System.Web.HttpUtility.UrlDecode(txtURLText.Text);
txtDecodedText.Text =
    Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.ASCII.GetString(Encoding.Unicode.GetBytes(txtURLText.Text));
txtDecodedText.Text =
    Encoding.Unicode.GetString(Convert.FromBase64String(txtURLText.Text));
Run Code Online (Sandbox Code Playgroud)

在不使用SQL Server的情况下翻译此编码的正确方法是什么?可能吗?我会接受VB.NET代码,因为我也熟悉它.


好吧,我确定我在这里遗漏了一些东西,所以这就是我所在的地方.

由于我的输入是一个基本的字符串,我开始只是编码部分的片段--4445434C41(转换为DECLA) - 并且第一次尝试是这样做的...

txtDecodedText.Text = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(txtURL.Text));
Run Code Online (Sandbox Code Playgroud)

...它所做的就是返回与我放入的完全相同的东西,因为它将每个字符转换成一个字节.

我意识到我需要手动将每两个字符解析为一个字节,因为我还不知道有什么方法可以做到这一点,所以现在我的小解码器看起来像这样:

while (!boolIsDone)
{
    bytURLChar = byte.Parse(txtURLText.Text.Substring(intParseIndex, 2));
    bytURL[intURLIndex] = bytURLChar;
    intParseIndex += 2;
    intURLIndex++;

    if (txtURLText.Text.Length - intParseIndex < 2)
    {
        boolIsDone = true;
    }
}

txtDecodedText.Text = Encoding.UTF8.GetString(bytURL);
Run Code Online (Sandbox Code Playgroud)

对于前两对来说,事情看起来很好,但是当它到达"4C"对并且说该字符串的格式不正确时,循环会变得很糟糕.

有趣的是,当我逐步调试调试器和字节数组上的GetString方法时,我能够解析到那一点,我得到", - +"作为结果.

我如何弄清楚我错过了什么 - 我是否需要为每个字节进行"直接转换"而不是尝试解析它?

c# sql vb.net hex ascii

58
推荐指数
2
解决办法
4831
查看次数

Graphics.DrawString()的中心文本输出

我正在使用.NETCF(Windows Mobile)Graphics类和DrawString()方法将单个字符渲染到屏幕上.

问题是我似乎无法使其正确居中.无论我为字符串渲染的位置的Y坐标设置什么,它总是低于该值,文本大小越大Y偏移越大.

例如,在文本大小12处,偏移量约为4,但在32处,偏移量约为10.

我希望角色垂直占据它所绘制的大部分矩形并水平居中.这是我的基本代码.this引用正在绘制的用户控件.

Graphics g = this.CreateGraphics();

float padx = ((float)this.Size.Width) * (0.05F);
float pady = ((float)this.Size.Height) * (0.05F);

float width = ((float)this.Size.Width) - 2 * padx;
float height = ((float)this.Size.Height) - 2 * pady;

float emSize = height;

g.DrawString(letter, new Font(FontFamily.GenericSansSerif, emSize, FontStyle.Regular),
            new SolidBrush(Color.Black), padx, pady);
Run Code Online (Sandbox Code Playgroud)

是的,我知道我可以使用标签控件来设置居中,但实际上我需要在Graphics课堂上手动完成.

c# graphics compact-framework

58
推荐指数
5
解决办法
11万
查看次数

WinForms ComboBox数据绑定问题

假设您正在执行以下操作

List<string> myitems = new List<string>
{
    "Item 1",
    "Item 2",
    "Item 3"
};

ComboBox box = new ComboBox();
box.DataSource = myitems;

ComboBox box2 = new ComboBox();
box2.DataSource = myitems
Run Code Online (Sandbox Code Playgroud)

所以现在我们有两个绑定到该数组的组合框,一切正常.但是当您更改一个组合框的值时,它会将两个组合框更改为您刚刚选择的组合框.

现在,我知道Arrays总是通过引用传递(了解到当我学习C:D时),但为什么地球上的组合框会一起变化?我不相信组合框控件正在修改集合.

作为一种解决方法,请不要实现预期/期望的功能

ComboBox box = new ComboBox();
box.DataSource = myitems.ToArray();
Run Code Online (Sandbox Code Playgroud)

c# data-binding winforms

51
推荐指数
2
解决办法
2万
查看次数

如何在Medium Trust中写入Web.Config?

将我的第一个体面大小的网络应用程序上传到我的共享主机为我提供了一系列新的挑战,我的意思是,不眠之夜.问题是,我当然没有开发出我的中等信任申请(或者有任何线索是什么.)

我解决了所有问题,除了一个.

我为管理员编写了一个安装程序,以便能够指定他们的连接字符串和其他首选项,但我找不到以中等信任方式写入web.config的方法.有没有人有解决方案,或者我应该将偏好放在另一个文件中?

c# asp.net medium-trust

43
推荐指数
1
解决办法
3494
查看次数

Internet Explorer中的JavaScript疑难解答工具

我大量使用Firebug和Mozilla JS控制台,但我偶尔遇到一个只有IE的JavaScript错误,这很难找到(例如:第724行的错误,当源HTML只有200行时).

我很想拥有一个用于Internet Explorer 的轻量级JS工具(la firebug),如果我遇到错误然后卸载,我可以在客户端的PC上安装几秒钟.某些Microsoft工具需要一些严肃的下载和配置时间.

有任何想法吗?

javascript debugging internet-explorer

42
推荐指数
3
解决办法
6322
查看次数

三重行情?如何在ASP.NET中分隔数据绑定Javascript字符串参数?

如何在锚OnClick事件中分隔Javascript数据绑定字符串参数?

  • 我在ASP.NET Repeater控件中有一个锚标记.
  • OnClick锚的事件包含对Javascript函数的调用.
  • Javascript函数为其输入参数采用字符串.
  • 字符串参数使用Repeater中的数据绑定值填充.

我需要"双引号" Container.DataItem.
我需要'单引号' OnClick.

我还需要一个分隔符(三引号?)作为Javascript函数调用的输入字符串参数.

由于我不能再使用'单引号',我如何确保Javascript函数知道输入参数是字符串而不是整数?

没有输入字符串参数周围的额外引号,Javascript函数认为我传入一个整数.

主播:

<a id="aShowHide" onclick='ToggleDisplay(<%# DataBinder.Eval(Container.DataItem, "JobCode") %>);' >Show/Hide</a>    
Run Code Online (Sandbox Code Playgroud)

这是Javascript:

<script language="JavaScript" type="text/javascript">
/* Shows/Hides the Jobs Div */
function ToggleDisplay(jobCode)
{
    /* Each div has its ID set dynamically ('d' plus the JobCode) */
    var elem = document.getElementById('d' + jobCode);

    if (elem) 
    {
        if (elem.style.display != 'block') 
        {
            elem.style.display = 'block';
            elem.style.visibility = 'visible';
        } 
        else
        {
            elem.style.display = 'none'; …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net anchor quotes

41
推荐指数
2
解决办法
2万
查看次数

如何将事件回调变为我的win表单线程安全?

当您从表单中订阅对象上的事件时,您实际上是将对回调方法的控制权移交给事件源.您不知道该事件源是否会选择在不同的线程上触发事件.

问题是,当调用回调时,您不能假设您可以对表单进行更新控制,因为如果在与运行表单的线程不同的线程上调用事件回调,则有时这些控件将引发异常.

.net c# events multithreading winforms

38
推荐指数
3
解决办法
3万
查看次数

HTML中的HTML Scraping

我一直在使用正则表达式在PHP中进行一些HTML抓取.这有效,但结果是挑剔和脆弱.有没有人使用任何提供更强大解决方案的软件包?配置驱动的解决方案是理想的,但我不挑剔.

html php screen-scraping

36
推荐指数
4
解决办法
4万
查看次数