小编Baz*_*zzz的帖子

如何使用Activator创建泛型类型的实例并将其转换回该类型?

我有一个泛型类型Store<T>,用于Activator创建这种类型的实例.现在,在使用Activator之后,我可以将结果对象的类型转换object回实例化类型吗?我知道我用来实例化泛型的类型.请参阅以下代码:

class Store<T> where T : IStorable 
{}

class Beer : IStorable 
{}

class BeerStore : Store<Beer>
{}

Type storeType = someObjectThatImplementsIStorable.GetType();
Type classType = typeof(Store<>);
Type[] typeParams = new Type[] { storeType };   
Type constructedType = classType.MakeGenericType(typeParams);

object x = Activator.CreateInstance(constructedType, new object[] { someParameter });
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的事情:

var store = (Store<typeof(objectThatImplementsIStorable)>)x;
Run Code Online (Sandbox Code Playgroud)

但由于显而易见的原因,这不起作用.作为替代方案,我试过:

var store = (Store<IStorable>)x;
Run Code Online (Sandbox Code Playgroud)

这可能在我看来有效,但给出了一个InvalidCastException.

如何再次访问Store<T>对象中我知道的方法x

c# generics reflection activator

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

我怎样才能读取pinMode OUTPUT中的引脚?

我有一个非常简单的测试草图,其中我试图设置一个引脚HIGH然后用它读取它的状态digitalRead.这是我的素描.

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    delay(1000);

    pinMode(3, OUTPUT);
    digitalWrite(3, HIGH);
    delay(1000);

    pinMode(3, INPUT);
    Serial.println(digitalRead(3));
}
Run Code Online (Sandbox Code Playgroud)

串口监控结果:

0
0
0
0
Run Code Online (Sandbox Code Playgroud)

我已经明白改变pinMode会阻止它HIGH.因此,将引脚设置为HIGHin OUTPUT模式然后更改为INPUT模式将其更改为LOW.因此,digitalRead将始终返回0.如果我不更改pinMode,它将无法读取引脚.那么如何在OUTPUT不丢失值的情况下读取处于模式下的引脚的当前设置?

arduino

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

在script标签src属性中使用tilde

在我的asp.net网站上使用MasterPage,Routing我在MasterPage部分的样式表hreflink标签属性中使用了波浪号head.像这样:

<link href="~/Styles/Main.css" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

这就像一个魅力.由于网站使用路由,网址将包含越来越多/,但样式表的href仍然有效,因为代字号指向Web应用程序的根目录并使用样式.

我尝试srcscript标签的属性使用相同的技术,但这似乎不会产生预期的结果.我试过了:

<script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript" ></script>
Run Code Online (Sandbox Code Playgroud)

但这只是将波形符输出到页面的HTML而不是像对href属性那样用Web应用程序的根替换它.我的经验是asp.net替换了href属性中的波浪号而不是src属性中的波浪号.

如何使波形符在src脚本标记的属性中工作?

asp.net routing tilde

16
推荐指数
1
解决办法
7327
查看次数

ArrayAdapter中textview的自定义字体

我试图改变的字体TextView在我的ArrayAdapter.该字体chantelli_antiqua.ttf位于assets文件夹中.

这是我的Java代码:

listItemAdapter = new ArrayAdapter<MenuItem>(this, R.layout.listitem, menuItems);

Typeface font = Typeface.createFromAsset(getAssets(), "chantelli_antiqua.ttf");  
TextView v = (TextView)listItemAdapter.getView(0, null, null);
v.setTypeface(font);
Run Code Online (Sandbox Code Playgroud)

listitem布局的xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="30sp"
/>
Run Code Online (Sandbox Code Playgroud)

我很确定这个Adapter.getView(int, View, ViewGroup)方法存在问题.我只是不明白作为变量传递什么并尝试过null.但这并不是我想要的.

如何改变的字体TextViewAdapter的自定义字体?

更新

根据Pixie的建议,我创建了一个MenuItemAdapter扩展ArrayAdapter<MenuItem>:

public class MenuItemAdapter extends ArrayAdapter<MenuItem>
{
    private Typeface font;

    public MenuItemAdapter(Context context, int textViewResourceId, List<MenuItem> objects) 
    {
        super(context, textViewResourceId, objects);

        font = Typeface.createFromAsset(context.getAssets(), "chantelli_antiqua.ttf"); 
    } …
Run Code Online (Sandbox Code Playgroud)

android

7
推荐指数
1
解决办法
9573
查看次数

如何使自定义控件可验证?

我有一个基于a的自定义控件Panel.它只是一个带有3个DropDownLists的简单面板.如果我添加CompareValidator到我的WebForm并将ControlToValidate属性设置为我的自定义控件的ID我得到以下错误:

Control '{0}' referenced by the ControlToValidate property of '{1}' cannot be validated.

我理解为什么,CompareValidator无法明智地验证任何东西Panel.那么我需要将哪些内容添加到自定义控件中以使验证程序能够对其进行验证呢?

我尝试向TextPanel 添加一个属性,它返回3个DropDownLists的Text属性的组合.徒劳无功.

我已经尝试查找某些ITextControl可验证控件(TextBox)实现的接口()并将它们添加到我的自定义控件中.徒劳无功.

如何基于Panel进行自定义控件,可以通过常规的.net验证器进行验证?(RequiredFieldValidator,CompareValidator等)

c# asp.net validation

6
推荐指数
1
解决办法
1293
查看次数

将png转换为高质量的ico

也许这是一个很容易解决的问题,但我还没有找到完美的解决方案.我正在尝试使用C#将png转换为ico,并在C/C#中找到将.PNG转换为.ICO的问题,其中提供了如下工作解决方案:

using (FileStream stream = File.OpenWrite(@"C:\temp\test.ico"))
{
    Bitmap bitmap = (Bitmap)Image.FromFile(@"c:\temp\test.png");
    Icon.FromHandle(bitmap.GetHicon()).Save(stream);
}
Run Code Online (Sandbox Code Playgroud)

对于我自己的项目,我稍微改变了这种方法:

string pngFile = "path/to/pngfile";
using (Bitmap bitmap = new Bitmap(pngFile))
{
   using (Icon icon = Icon.FromHandle(bitmap.GetHicon()))
   {
      using (MemoryStream stream = new MemoryStream())
      {
         icon.Save(stream);
         // something interesting with icon here
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是由此产生的ico质量很差,我猜它已经调整到16x16并丢失了一些颜色深度,也许现在只有16种颜色?如何转换为更高质量的ico文件?

c# icons png

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

如何在网页集合发生变化时重新加载RouteTable?

在我的Global.asax文件中,Application_StartRouteTable.Routes通过循环遍历从数据库收集的网页列表来创建一定数量的路由.这很好,所有路线都是根据需要创建和运行的.但是在我的Web应用程序中,用户可以修改数据库,从而修改网页集合.这意味着在应用程序的生命周期中,某些路由变为无效,并且应添加新路由.

我想做的是:当用户将某些内容更改为网页集时,我想清除RouteTable并通过再次循环遍历(修改过的)网页集来重新加载它.

不幸的是,Application_Startin Global.asax只运行一次,即在应用程序开始时运行.我尝试将其移动到Session_Start由于RoutesTable静态而导致不期望的行为.

如何让我的用户能够即时更改网页集,同时让静态与其RouteTable保持"同步"状态?

编辑

目前我做这样的事情(伪代码):

public class WebPageInfo      // represents a record in the database
{
 public string Title;         //  My nice page
 public string Url;           //  NicePage 
 public string PhysicalFile;  //  ~/Page.aspx
}
Run Code Online (Sandbox Code Playgroud)

在Global.asax中:

protected virtual void Application_Start(object sender, EventArgs e)
{
 foreach (WebPageInfo webPageInfo in webPageInfos)
 {
  RouteTable.RegisterRoute(webPageInfo.Title, webPageInfo.Url, webPageInfo.PhysicalFile);
 }
}
Run Code Online (Sandbox Code Playgroud)

问题是在应用程序的生命周期中用户可以添加/修改/删除记录webPageInfos,如何使用这些更改来更新RouteTable?

c# asp.net routetable global-asax

5
推荐指数
1
解决办法
2921
查看次数

根据父级行高的图像最大大小

是否可以使用纯CSS根据其父级的行高来制作内嵌图像大小(比例)?

考虑一下这个设置:

HTML:

<p>
  <img src="image.png"/> text text text
</p>
Run Code Online (Sandbox Code Playgroud)

CSS:

p {
  line-height: 16px;
}

img {
  display: inline;
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

我想要的是图像缩放到16px的高度,就像line-height段落一样.这可能吗?

请注意:我对HTML和CSS的更改持开放态度,但我不是在使用JS解决方案.

html css

5
推荐指数
2
解决办法
1428
查看次数

如何根据数据库结构的变化更新DataContext?

我正在使用 linq-to-sql 的 Visual Studio 2010 工作,DataContext它有几个到数据库表的映射。现在,当我更改数据库结构的某些内容时,我注意到DataContext没有更改并导致错误。DataContext 不再与数据库的结构相对应。我通常通过删除 DataContext 中的所有表映射并从 Visual Studio 的数据库资源管理器中再次拖放它们来解决此问题。我只是觉得这很麻烦,一定有更好的方法来做到这一点吗?当我更改数据库结构时,是否有按钮或选项可以自动更新 DataContext?

c# visual-studio-2010 linq-to-sql

5
推荐指数
1
解决办法
7054
查看次数

Workbox 5 语法错误 - 未捕获的类型错误:workbox.expiration.CacheableResponsePlugin 不是构造函数

我正在尝试为一个小型静态站点设置一个简单的 Service Worker,但出现 Service Worker 控制台错误:

sw.js:59 Uncaught TypeError: workbox.expiration.CacheableResponsePlugin is not a constructor

这是在线 new workbox.expiration.CacheableResponsePlugin

任何有关如何解决此问题的建议将不胜感激。

  workbox.routing.registerRoute(
    /\.(?:html)$/,
    new workbox.strategies.NetworkFirst({
      cacheName: 'html-cache',
      plugins: [
        new workbox.expiration.CacheableResponsePlugin({
          statuses: [0, 200],
        }),

        new workbox.expiration.ExpirationPlugin({
          maxEntries: 50,
          maxAgeSeconds: 5 * 60,
        })
      ]
    })
  )
Run Code Online (Sandbox Code Playgroud)

workbox

5
推荐指数
1
解决办法
2192
查看次数