正如SOLID原则所说,最好通过将切换条件转换为类和接口来删除它们.我想用这段代码做:
注意:这段代码不是真正的代码,我只想把它放进去.
MessageModel message = getMessageFromAnAPI();
manageMessage(message);
...
void manageMessage(MessageModel message){
switch(message.typeId) {
case 1: justSave(message); break;
case 2: notifyAll(message); break;
case 3: notify(message); break;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想删除switch语句.所以我为它创建了一些类,我尝试在这里实现一个多态:
interface Message{
void manageMessage(MessageModel message);
}
class StorableMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
justSave(message);
}
}
class PublicMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
notifyAll(message);
}
}
class PrivateMessage implements Message{
@Override
public void manageMessage(MessageModel message) {
notify(message);
}
}
Run Code Online (Sandbox Code Playgroud)
然后我调用我的API来获取我的MessageModel:
MessageModel message = getMessageFromAnAPI(); …Run Code Online (Sandbox Code Playgroud) 我想使用Ajax来防止刷新我的网页,并为了这个,我想返回 查看由PartialView从法控制器上的ajax调用.
问题是:
Viewas 是好方法PartialView吗?PartialView方法中的视图路径Controller?例如,对于在_index视图查看/ BasicInfo/_index路径,我尝试
PartialView("~/Views/BasicInfo/_Index");,
PartialView("~/Views/BasicInfo/_Index.chtml");,PartialView("BasicInfo/_Index");
,并得到误差找不到视图
编辑
如何将视图名称指定为PartialView方法,如果视图位于共享文件夹之外的文件夹中并且超出相关视图文件夹.例如,我的控制器名称是controller1,我的View在此路径中是Views/BasicInfo/_Index?
我想在一些应用程序之间共享一些部分视图.我尝试了在互联网上建议的不同解决方案,但没有一个不起作用!但我希望通过在PartialView方法中使用绝对或关系路径它可以工作,但我不知道是否可能.
所以这里有两个问题:
PartialView吗?"~/../Common/myView.cshtml".在这种情况下,Visual Studio在运行时没有在编辑器上出错我遇到错误("不能使用前导..退出顶层目录").那么在根之外使用公共文件夹的路径的任何解决方案是什么?我知道将这些问题分成2个问题更好,但由于没有解决方案来分享部分观点,所以我在这里收集它们.
正如您所看到的,我的解决方案中包含一个Common文件夹,_MainMenu.cshtml并且我也在网站项目的共享文件夹中有此文件.
我应该如何在Admin控制器中编写PartialView以获取每个部分的路径?
我想要一些这样的代码:
对于Common文件夹:
return PartialView("~/../Common/_MainMenu.cshtml");
对于共享文件夹:
return PartialView("http://localhost:16287/Module/Menu/_MainMenu");
如您所知,我们可以使用attach命令从多个数据库中选择,如下所示:
String path = DBHelper.getDatabasePath(context);
String sql = "ATTACH DATABASE '" + path + "/" + dbname.toString()
+ ".db' AS \"" + dbname.toString() + "\";";
db.execSQL(sql);
Run Code Online (Sandbox Code Playgroud)
然后通过使用Cursor,我们可以从中进行选择.
通过使用Android Room,我该怎么做?是否有任何附件或类似命令来执行此操作?
java sqlite android android-room android-architecture-components
我有一份清单object.如何使用属性名称订购此列表?
string orderbyField = "Code";
List<object> l = FillList();
l = l.OrderBy(o => orderbyField);
Run Code Online (Sandbox Code Playgroud)
我可以为此问题进行扩展吗?
我有一个在WPF设计的窗口,我在WinForms所有者的中心使用它.现在,我想移动所有者表单,此时我的WPF窗口也要移动到表单的中心!
但我有一个问题,只有当窗口位于屏幕中心形成的窗体的中心时.否则以不同于Windows坐标的形式运行.我只是将窗体的位移值添加到窗口位置.
现在我得出结论,WPF Windows上像素的坐标因WinForms而异!
如何将WPF窗口位置转换为WinForms基本位置,反之亦然?
所有者表格代码是:
public partial class Form1 : Form
{
private WPF_Window.WPF win;
public Form1()
{
InitializeComponent();
win = new WPF();
win.Show();
CenterToParent(win);
}
private void CenterToParent(System.Windows.Window win)
{
win.Left = this.Left + (this.Width - win.Width) / 2;
win.Top = this.Top + (this.Height - win.Height) / 2;
}
protected override void OnMove(EventArgs e)
{
base.OnMove(e);
CenterToParent(win);
}
}
Run Code Online (Sandbox Code Playgroud) 我们可以在C#中做到这一点:
private T getData<T>(Context context, String url, PostModel postModel) throws ApiException, IOException, ConnectionException {
Response response = new CallApi<T>(Connection.getApiUrl(context))
.Post(url, postModel);
if (response.code() != 200) throw new ApiException(context,response);
Gson gson = new GsonBuilder()
.setLenient()
.create();
T obj = gson.fromJson(response.body().charStream(),
new TypeToken<T>() {
}.getType());
return obj;
}
Run Code Online (Sandbox Code Playgroud)
致电:
EmployeeModel model = getData<EmployeeModel>(context, url, null);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的T那样,我们在方法签名中声明并在方法内部,将其替换为EmployeeModelin CallApi<T>和new TypeToken<T>,它将返回EmployeeModel对象作为结果.
在Java(Android)中,当我想使用这个泛型时,我有:
private <T> T getData(Context context, String url, PostModel postModel){...}
Run Code Online (Sandbox Code Playgroud)
但它给我一个LinkedTreeMap对象,而不是一个EmployeeModel!当我将<T>从方法签名移动到类本身时,结果也一样. …
我有一个扩展方法:
public static List<object> ToModelViewObjectList<ModelViewType>(this IEnumerable<object> source)
{
List<ModelViewType> destinationList = new List<ModelViewType>();
PropertyInfo[] ModelViewProperties = typeof(ModelViewType).GetProperties();
foreach (var sourceElement in source)
{
object destElement = Activator.CreateInstance<ModelViewType>();
foreach (PropertyInfo sourceProperty in sourceElement.GetType().GetProperties())
{
if (ModelViewProperties.Select(m => m.Name).Contains(sourceProperty.Name))
{
destElement.GetType().GetProperty(sourceProperty.Name).SetValue(destElement, sourceProperty.GetValue(sourceElement));
}
}
destinationList.Add((ModelViewType)destElement);
}
return destinationList.Cast<object>().ToList();
}
Run Code Online (Sandbox Code Playgroud)
我有一个方法,其中包含一个对象列表,我希望在此方法中使用调用扩展方法:
public void GridModel(IEnumerable<object> GridDataSource)
{
List<object> list = GridDataSource.ToModelViewObjectList<GridDataSource[0].GetType()>();
}
Run Code Online (Sandbox Code Playgroud)
我应该写什么而不是GridDataSource [0] .GetType()?
我有一个带对象参数的方法.我想创建一个对象类型的通用列表.
public void CreateListByNonGenericType(object myObject)
{
Type objType = myObject.GetType();
var lst = System.Collections.Generic.List < objType.MakeGenericType() > (); …Run Code Online (Sandbox Code Playgroud) 我有一个使用ViewModel和MutableLiveData将实时数据绑定到我的UI的应用程序。经过几个小时的时间!并在互联网上查看所有样本,但我找不到问题的原因。
我的活动:
public class DetailActivity extends DaggerAppCompatActivity {
ActivityStudentBinding mViewDataBinding;
MyModel myModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mViewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_student);
mViewDataBinding.setLifecycleOwner(this);
myModel = ViewModelProviders.of(this).get(MyModel.class);
mViewDataBinding.setViewmodel(myModel);
}
Run Code Online (Sandbox Code Playgroud)
我的模型课:
public class MyModel extends ViewModel
{
public MutableLiveData<StudentData.Student> student = new MutableLiveData<>();
public MyModel() {
this.student=student;
StudentData.Student student = new StudentData().getFirstStudent();
this.student.setValue(student);
}
}
Run Code Online (Sandbox Code Playgroud)
和布局(我在这里清理了多余的代码):
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data >
<variable
name="viewmodel"
type="googlearchitecturecomponents.ferdos.com.dagger211.detail.MyModel"/>
</data>
<TextView
android:text="@{viewmodel.student.id}" />
<TextView
android:text="@{viewmodel.student.family}" />
<TextView
android:text="@{viewmodel.student.id}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
在运行时和创建活动时,出现以下错误:
java.lang.RuntimeException:无法启动活动ComponentInfo {googlearchitecturecomponents.ferdos.com.dagger211 …
android viewmodel android-viewholder android-livedata mutablelivedata
我正在阅读 Redux 官方教程。当我看到counterReducer任何模块中都没有有价值且有效的功能时,我感到很惊讶!我找不到它的任何描述,但是:
因为我们知道 counterReducer 函数来自 features/counter/counterSlice.js,所以让我们逐个查看该文件中的内容。
我什至将切片器的名称更改为 counter3,但它仍然有效!
谁能向我描述一下它是如何生成的?
counterSlice.js
import { createSlice } from '@reduxjs/toolkit';
export const counterSlice = createSlice({
name: 'counter3',
initialState: {
value: 0,
},
reducers: {
increment: state => {
state.value += 1;
},
decrement: state => {
state.value -= 1;
},
incrementByAmount: (state, action) => {
state.value += action.payload;
},
},
});
export const { increment, decrement, incrementByAmount } = counterSlice.actions;
export const incrementAsync = amount => dispatch => {
setTimeout(() …Run Code Online (Sandbox Code Playgroud) SELECT name ,
( SUM(CASE WHEN TransTypeName LIKE 'credit%' THEN amount
ELSE 0
END) - SUM(CASE WHEN TransTypeName LIKE 'Debit%' THEN amount
ELSE 0
END) ) * 5 / 100 AS Interest
FROM .....
Run Code Online (Sandbox Code Playgroud)
此查询返回一些负值,我想将负值转换为零.如何编写查询
是否可以将变量(或常量)放入路径而不是将整个路径写为字符串文字。看起来,angular 除了字符串文字外不接受任何内容。
import aClass = require("./simpleClass");
import { aComponent } from aClass.myClass.Root + 'tutorial.component';
Run Code Online (Sandbox Code Playgroud)
我的课:
export class myClass{
public static Root = "./"
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中aClass.myClass.Root + 'tutorial.component'有解释的错误
c# ×4
android ×3
java ×3
asp.net-mvc ×2
generics ×2
.net ×1
android-architecture-components ×1
android-room ×1
angular ×1
javascript ×1
linq ×1
pixel ×1
redux ×1
sql ×1
sql-server ×1
sqlite ×1
typescript ×1
viewmodel ×1
winforms ×1
wpf ×1